Comments (7)
@mhatzl Interesting! I am not seeing this issue on my Mac. Could you please post your output here?
from selfie.
The output I get when running make os
under Windows WSL is:
./selfie -l selfie.m -m 2 -l selfie.m -y 1 -l selfie.m -m 1
./selfie: this is the selfie system from selfie.cs.uni-salzburg.at with
./selfie: 64-bit unsigned integers and 64-bit pointers hosted on Linux
./selfie: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
./selfie: selfie executing selfie.m with 2MB physical memory on mipster
./selfie: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
selfie.m: selfie executing selfie.m with 1MB physical memory on hypster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
selfie.m: selfie executing selfie.m with 1MB physical memory on mipster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
synopsis: selfie.m { -c { source } | -o binary | ( -s | -S ) assembly | -l binary } [ ( -m | -d | -r | -y ) 0-4096 ... ]
selfie.m: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
selfie.m: selfie.m exiting with exit code 0
selfie.m: selfie terminating selfie.m with exit code 0
selfie.m: --------------------------------------------------------------------------------
selfie.m: summary: 59944 executed instructions [22.31% nops]
selfie.m: 0.00MB allocated in 6 mallocs
selfie.m: 0.00MB(100.00% of 0.00MB) actually accessed
selfie.m: 0.20MB(20.31% of 1MB) mapped memory
selfie.m: --------------------------------------------------------------------------------
selfie.m: init: lui: 276(0.46%)[0.00%], addi: 23451(39.12%)[19.12%]
selfie.m: memory: ld: 13937(23.25%)[14.09%], sd: 8737(14.57%)[46.24%]
selfie.m: compute: add: 1715(2.86%)[5.94%], sub: 668(1.11%)[19.16%], mul: 1514(2.52%)[9.64%]
selfie.m: compute: divu: 658(1.09%)[7.75%], remu: 667(1.11%)[14.99%]
selfie.m: compare: sltu: 985(1.64%)[25.48%]
selfie.m: control: beq: 1253(2.09%)[62.17%], jal: 4026(6.71%)[33.06%], jalr: 1925(3.21%)[0.00%]
selfie.m: system: ecall: 132(0.22%)
selfie.m: profile: total,max(ratio%)@address,2ndmax,3rdmax
selfie.m: calls: 1925,659(34.23%)@0x4668,329(17.09%)@0x4818,329(17.09%)@0x487C
selfie.m: loops: 186,78(41.93%)@0x6ECC,63(33.87%)@0x214,45(24.19%)@0x610C
selfie.m: loads: 13937,659(4.72%)@0x467C,659(4.72%)@0x4680,659(4.72%)@0x4690
selfie.m: stores: 8737selfie.m: palloc out of physical memory
./selfie: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
./selfie: selfie.m exiting with exit code 21
./selfie: selfie terminating selfie.m with exit code 21
./selfie: --------------------------------------------------------------------------------
./selfie: summary: 198654870 executed instructions [18.81% nops]
./selfie: 3.63MB allocated in 28 mallocs
./selfie: 2.30MB(63.26% of 3.63MB) actually accessed
./selfie: 2.52MB(126.18% of 2MB) mapped memory
./selfie: --------------------------------------------------------------------------------
./selfie: init: lui: 7039562(3.54%)[0.01%], addi: 75054225(37.78%)[18.13%]
./selfie: memory: ld: 41616354(20.94%)[18.49%], sd: 26520261(13.35%)[24.65%]
./selfie: compute: add: 11198618(5.63%)[3.44%], sub: 3389631(1.70%)[22.87%], mul: 3625857(1.82%)[16.20%]
./selfie: compute: divu: 1564809(0.78%)[5.99%], remu: 572866(0.28%)[23.29%]
./selfie: compare: sltu: 4036030(2.03%)[2.68%]
./selfie: control: beq: 4890881(2.46%)[56.60%], jal: 12953942(6.52%)[36.12%], jalr: 6160685(3.10%)[0.00%]
./selfie: system: ecall: 31149(0.01%)
./selfie: profile: total,max(ratio%)@address,2ndmax,3rdmax
./selfie: calls: 6160700,912340(14.80%)@0x4668,516633(8.38%)@0x1976C,393294(6.38%)@0x4818
./selfie: loops: 452566,311789(68.89%)@0x22FAC,59945(13.24%)@0x22F10,43458(9.60%)@0x26B6C
./selfie: loads: 41616354,912340(2.19%)@0x467C,912340(2.19%)@0x4680,912340(2.19%)@0x4690
./selfie: stores: 26520261,912340(3.44%)@0x466C,912340(3.44%)@0x4674,516633(1.94%)@0x19770
./selfie: CPU+memory: reads+writes,reads,writes[reads/writes]
./selfie: heap segment: 3162086,2909742,252344[11.53]
./selfie: gp register: 8981899,8981897,2[4490948.50]
./selfie: data segment: 8987943,8165060,822883[9.92]
./selfie: ra register: 24580481,12290240,12290241[0.99]
./selfie: sp register: 121457478,79749654,41707824[1.91]
./selfie: s0 register: 42463020,30203923,12259097[2.46]
./selfie: stack total: 188500979,122243817,66257162[1.84]
./selfie: stack segment: 55987635,30542593,25445042[1.20]
./selfie: a0 register: 17211537,5512320,11699217[0.47]
./selfie: a1 register: 31085,0,31085[0.00]
./selfie: a2 register: 28670,0,28670[0.00]
./selfie: a3 register: 3,0,3[0.00]
./selfie: a6 register: 2416,2415,1[2415.00]
./selfie: a7 register: 31149,0,31149[0.00]
./selfie: args total: 17304860,5514735,11790125[0.46]
./selfie: t0 register: 92553607,46276933,46276674[1.00]
./selfie: t1 register: 46835914,23418016,23417898[1.00]
./selfie: t2 register: 12606606,6303303,6303303[1.00]
./selfie: t3 register: 426982,213491,213491[1.00]
./selfie: temps total: 152423109,76211743,76211366[1.00]
./selfie: --------------------------------------------------------------------------------
make: *** [Makefile:90: os] Error 21
I have added the following lines to selfie.c. They do nothing except taking up space.
// mhatzl
uint64_t* search_field_entry1(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry2(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry3(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry4(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry5(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry6(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry7(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry8(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry9(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
uint64_t* search_field_entry10(uint64_t* fields, char* name) {
uint64_t* field_entry;
printf(name);
field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}
// mhatzl
from selfie.
@mhatzl Please try: ./selfie -l selfie.m -m 2 -l selfie1.m -y 2 -l selfie2.m -m 1
after duplicating selfie.m to selfie1.m and selfie2.m
from selfie.
This works.
As a sidenote, running ./selfie -l selfie.m -m 2 -l selfie1.m -y 1 -l selfie2.m -m 1
results in
./selfie -l selfie.m -m 2 -l selfie1.m -y 1 -l selfie2.m -m 1
./selfie: this is the selfie system from selfie.cs.uni-salzburg.at with
./selfie: 64-bit unsigned integers and 64-bit pointers hosted on Linux
./selfie: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
./selfie: selfie executing selfie.m with 2MB physical memory on mipster
./selfie: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie1.m
selfie.m: selfie executing selfie1.m with 1MB physical memory on hypster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie1.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie1.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie1.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie2.m
selfie1.m: selfie executing selfie2.m with 1MB physical memory on mipster
selfie1.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
synopsis: selfie2.m { -c { source } | -o binary | ( -s | -S ) assembly | -l binary } [ ( -m | -d | -r | -y ) 0-4096 ... ]
selfie1.m: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
selfie1.m: selfie2.m exiting with exit code 0
selfie1.m: selfie terminating selfie2.m with exit code 0
selfie1.m: --------------------------------------------------------------------------------
selfie1.m: summary: 60310 executed instructions [22.32% nops]
selfie1.m: 0.00MB allocated in 6 mallocs
selfie1.m: 0.00MB(100.00% of 0.00MB) actually accessed
selfie1.m: 0.20MB(20.31% of 1MB) mapped memory
selfie1.m: --------------------------------------------------------------------------------
selfie1.m: init: lui: 278(0.46%)[0.00%], addi: 23594(39.12%)[19.13%]
selfie1.m: memory: ld: 14022(23.25%)[14.11%], sd: 8791(14.57%)[46.22%]
selfie1.m: compute: add: 1725(2.86%)[5.97%], sub: 672(1.11%)[19.19%], mul: 1522(2.52%)[9.72%]
selfie1.m: compute: divu: 662(1.09%)[7.85%], remu: 671(1.11%)[14.90%]
selfie1.m: compare: sltu: 991(1.64%)[25.53%]
selfie1.m: control: beq: 1261(2.09%)[62.17%], jal: 4051(6.71%)[33.05%], jalr: 1937(3.21%)[0.00%]
selfie1.m: system: ecall: 133(0.22%)
selfie1.m: profile: total,max(ratio%)@address,2ndmax,3rdmax
selfie1.m: calls: 1937,663(34.22%)@0x4668,331(17.08%)@0x4818,331(17.08%)@0x487C
selfie1.m: loops: 187,78(41.71%)@0x6ECC,63(33.69%)@0x214,46(24.59%)@0x610C
selfie1.m: loads: 14022,663(4.72%)@0x467C,663(4.72%)@0x4680,663(4.72%)@0x4690
selfie1.m: stores: 8791selfie.m: palloc out of physical memory
./selfie: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
./selfie: selfie.m exiting with exit code 21
./selfie: selfie terminating selfie.m with exit code 21
./selfie: --------------------------------------------------------------------------------
./selfie: summary: 199512291 executed instructions [18.81% nops]
./selfie: 3.63MB allocated in 28 mallocs
./selfie: 2.30MB(63.26% of 3.63MB) actually accessed
./selfie: 2.52MB(126.18% of 2MB) mapped memory
./selfie: --------------------------------------------------------------------------------
./selfie: init: lui: 7072966(3.54%)[0.01%], addi: 75384583(37.78%)[18.13%]
./selfie: memory: ld: 41789850(20.94%)[18.48%], sd: 26634870(13.35%)[24.66%]
./selfie: compute: add: 11248386(5.63%)[3.44%], sub: 3403945(1.70%)[22.86%], mul: 3640852(1.82%)[16.19%]
./selfie: compute: divu: 1569680(0.78%)[6.01%], remu: 576266(0.28%)[23.29%]
./selfie: compare: sltu: 4051091(2.03%)[2.69%]
./selfie: control: beq: 4910113(2.46%)[56.62%], jal: 13010205(6.52%)[36.12%], jalr: 6188240(3.10%)[0.00%]
./selfie: system: ecall: 31244(0.01%)
./selfie: profile: total,max(ratio%)@address,2ndmax,3rdmax
./selfie: calls: 6188255,917822(14.83%)@0x4668,518109(8.37%)@0x1976C,395714(6.39%)@0x4818
./selfie: loops: 453036,311789(68.82%)@0x22FAC,60311(13.31%)@0x22F10,43458(9.59%)@0x26B6C
./selfie: loads: 41789850,917822(2.19%)@0x467C,917822(2.19%)@0x4680,917822(2.19%)@0x4690
./selfie: stores: 26634870,917822(3.44%)@0x466C,917822(3.44%)@0x4674,518109(1.94%)@0x19770
./selfie: CPU+memory: reads+writes,reads,writes[reads/writes]
./selfie: heap segment: 3175327,2921678,253649[11.51]
./selfie: gp register: 9026388,9026386,2[4513193.00]
./selfie: data segment: 9032432,8204513,827919[9.90]
./selfie: ra register: 24690511,12345255,12345256[0.99]
./selfie: sp register: 121997189,80103960,41893229[1.91]
./selfie: s0 register: 42634267,30320250,12314017[2.46]
./selfie: stack total: 189321967,122769465,66552502[1.84]
./selfie: stack segment: 56218010,30664700,25553310[1.20]
./selfie: a0 register: 17288065,5536720,11751345[0.47]
./selfie: a1 register: 31180,0,31180[0.00]
./selfie: a2 register: 28734,0,28734[0.00]
./selfie: a3 register: 3,0,3[0.00]
./selfie: a6 register: 2447,2446,1[2446.00]
./selfie: a7 register: 31244,0,31244[0.00]
./selfie: args total: 17381673,5539166,11842507[0.46]
./selfie: t0 register: 92952767,46476513,46476254[1.00]
./selfie: t1 register: 47029104,23514611,23514493[1.00]
./selfie: t2 register: 12650928,6325464,6325464[1.00]
./selfie: t3 register: 429310,214655,214655[1.00]
./selfie: temps total: 153062109,76531243,76530866[1.00]
./selfie: --------------------------------------------------------------------------------
make: *** [Makefile:90: os] Error 21
So it looks to me that running hypster with 1 MB was the problem.
from selfie.
@mhatzl Ok, the issue is hypster then. What we actually need for proper diagnosis is hypster outputting an execution profile similar to mipster but with a focus on memory and ecalls performed on behalf of the virtualized process. That would have revealed the root cause. Would you be interested in implementing that in a PR?
from selfie.
Unfortunately, I currently do not have enough time.
from selfie.
I looked into this a little more. The os
target in the current configuration seems to cause troubles once the students start to implement the first "real" assignment. I implemented the assembler-parser
assignment locally and I got the same error palloc out of physical memory
after my first commit, in which I basically only added
- the definitions of the RISC-U instruction symbols,
- the definition of a function called
is_hex_digit(uint64_t c)
- to parse hexadecimal numbers, - the definition of a function
get_assembly_symbol()
- the assembly pendant toget_symbol()
for C*, and - the declaration of some other functions (without definitions).
As discussed, I will open a Pull Request to change the os
target in the Makefile
to used 2MB for hypster (instead of 1MB), and I will look into this issue in more detail when I have time (as proposed in #295 (comment)).
from selfie.
Related Issues (20)
- 10) Virtual Memory - Introductory Assignments
- 11) Virtualization - Introductory Assignments
- Compiler warnings with GCC 10.2.0 HOT 3
- Docker Build on Mac
- Clean up gcc/clang toolchain in Dockerselfie image to support 32-bit and 64-bit x86 and RISC-V HOT 10
- `self-assembler` assignment results in timeout HOT 7
- ELF file integrity
- Grader: Replace `threads` task `shared-heap` with thread-safe task HOT 4
- Suggestion: -Werror when self-grading HOT 7
- `characters of assembly` count in disassembler output is incorrect in `printf` branch HOT 10
- Grader not terminating on plain selfie HOT 4
- Order in list of assignments out of sync HOT 1
- Inconsistent handling of unexpected symbol syntax errors HOT 4
- Compiler warnings with GCC 11.1.0 HOT 4
- Residual files in selfie root directory in the selfie docker image after machine build HOT 1
- Multiplatform AMD64/ARM64 Support HOT 2
- modeler returns "maximum code size exceeded" or "4712 expected between -4096 and 4095" if code size is increased HOT 7
- 32-bit + mipster + self-self-self [+ gc] is failing HOT 1
- Naming the programming language C* causes some confusion HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from selfie.