[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 1/6] Schönheitskorrekturen
From: Max Reitz <max@xxxxxxxxxx>
- Der dump in src/modules/cdi/ata nimmt viel Platz weg, ist aber
unnötig
* cdi/cmos.h muss nicht ausführbar sein
Signed-off-by: Max Reitz <max@xxxxxxxxxx>
---
src/modules/cdi/ata/dump |16723 ------------------------------------
1 files changed, 0 insertions(+), 16723 deletions(-)
delete mode 100644 src/modules/cdi/ata/dump
mode change 100755 => 100644 src/modules/cdi/include/cdi/cmos.h
diff --git a/src/modules/cdi/ata/dump b/src/modules/cdi/ata/dump
deleted file mode 100644
index 1a6323a..0000000
--- a/src/modules/cdi/ata/dump
+++ /dev/null
@@ -1,16723 +0,0 @@
-
-ata.mod: file format elf32-i386
-
-Disassembly of section .text:
-
-40000000 <ata_drv_identify>:
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
-40000000: 55 push %ebp
-40000001: 89 e5 mov %esp,%ebp
-40000003: 57 push %edi
-40000004: 81 ec 34 02 00 00 sub $0x234,%esp
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-4000000a: 8d bd cc fd ff ff lea -0x234(%ebp),%edi
-40000010: fc cld
-40000011: ba 00 00 00 00 mov $0x0,%edx
-40000016: b8 0c 00 00 00 mov $0xc,%eax
-4000001b: 89 c1 mov %eax,%ecx
-4000001d: 89 d0 mov %edx,%eax
-4000001f: f3 ab rep stos %eax,%es:(%edi)
-40000021: 8b 45 08 mov 0x8(%ebp),%eax
-40000024: 89 85 cc fd ff ff mov %eax,-0x234(%ebp)
-4000002a: c7 85 d0 fd ff ff 01 movl $0x1,-0x230(%ebp)
-40000031: 00 00 00
-40000034: c6 85 d8 fd ff ff 01 movb $0x1,-0x228(%ebp)
-4000003b: c7 85 dc fd ff ff ec movl $0xec,-0x224(%ebp)
-40000042: 00 00 00
-40000045: 66 c7 85 ec fd ff ff movw $0x1,-0x214(%ebp)
-4000004c: 01 00
-4000004e: 66 c7 85 ee fd ff ff movw $0x200,-0x212(%ebp)
-40000055: 00 02
-40000057: 8d 85 fc fd ff ff lea -0x204(%ebp),%eax
-4000005d: 89 85 f4 fd ff ff mov %eax,-0x20c(%ebp)
-
- // Request starten
- if (!ata_request(&request)) {
-40000063: 83 ec 0c sub $0xc,%esp
-40000066: 8d 85 cc fd ff ff lea -0x234(%ebp),%eax
-4000006c: 50 push %eax
-4000006d: e8 67 0f 00 00 call 40000fd9 <ata_request>
-40000072: 83 c4 10 add $0x10,%esp
-40000075: 85 c0 test %eax,%eax
-40000077: 75 16 jne 4000008f <ata_drv_identify+0x8f>
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40000079: 83 ec 0c sub $0xc,%esp
-4000007c: ff 75 08 pushl 0x8(%ebp)
-4000007f: e8 1c 01 00 00 call 400001a0 <atapi_drv_identify>
-40000084: 83 c4 10 add $0x10,%esp
-40000087: 89 85 c8 fd ff ff mov %eax,-0x238(%ebp)
-4000008d: eb 11 jmp 400000a0 <ata_drv_identify+0xa0>
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-4000008f: 8b 45 08 mov 0x8(%ebp),%eax
-40000092: c6 40 19 00 movb $0x0,0x19(%eax)
-
- // TODO: Informationen verarbeiten
-
- return 1;
-40000096: c7 85 c8 fd ff ff 01 movl $0x1,-0x238(%ebp)
-4000009d: 00 00 00
-400000a0: 8b 85 c8 fd ff ff mov -0x238(%ebp),%eax
-}
-400000a6: 8b 7d fc mov -0x4(%ebp),%edi
-400000a9: c9 leave
-400000aa: c3 ret
-
-400000ab <ata_drv_read_sectors>:
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-400000ab: 55 push %ebp
-400000ac: 89 e5 mov %esp,%ebp
-400000ae: 83 ec 58 sub $0x58,%esp
-400000b1: 8b 45 0c mov 0xc(%ebp),%eax
-400000b4: 89 45 a8 mov %eax,-0x58(%ebp)
-400000b7: 8b 45 10 mov 0x10(%ebp),%eax
-400000ba: 89 45 ac mov %eax,-0x54(%ebp)
- int result = 1;
-400000bd: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%ebp)
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
-400000c4: 8b 45 18 mov 0x18(%ebp),%eax
-400000c7: 89 45 ec mov %eax,-0x14(%ebp)
- uint64_t lba = start;
-400000ca: 8b 45 a8 mov -0x58(%ebp),%eax
-400000cd: 8b 55 ac mov -0x54(%ebp),%edx
-400000d0: 89 45 f0 mov %eax,-0x10(%ebp)
-400000d3: 89 55 f4 mov %edx,-0xc(%ebp)
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-400000d6: 8b 45 14 mov 0x14(%ebp),%eax
-400000d9: 89 45 fc mov %eax,-0x4(%ebp)
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-400000dc: e9 af 00 00 00 jmp 40000190 <ata_drv_read_sectors+0xe5>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
-400000e1: 81 7d fc 00 01 00 00 cmpl $0x100,-0x4(%ebp)
-400000e8: 76 08 jbe 400000f2 <ata_drv_read_sectors+0x47>
- current_count = 256;
-400000ea: 66 c7 45 ea 00 01 movw $0x100,-0x16(%ebp)
-400000f0: eb 07 jmp 400000f9 <ata_drv_read_sectors+0x4e>
- } else {
- current_count = count_left;
-400000f2: 8b 45 fc mov -0x4(%ebp),%eax
-400000f5: 66 89 45 ea mov %ax,-0x16(%ebp)
- }
-
- // Request vorbereiten
- request.dev = dev;
-400000f9: 8b 45 08 mov 0x8(%ebp),%eax
-400000fc: 89 45 b4 mov %eax,-0x4c(%ebp)
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
-400000ff: c7 45 b8 01 00 00 00 movl $0x1,-0x48(%ebp)
- request.flags.direction = READ;
-40000106: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
- // FIXME
- request.flags.poll = 1;
-4000010d: c6 45 c0 01 movb $0x1,-0x40(%ebp)
- request.flags.ata = 0;
-40000111: c6 45 c1 00 movb $0x0,-0x3f(%ebp)
- request.flags.lba = 1;
-40000115: c6 45 c2 01 movb $0x1,-0x3e(%ebp)
-
- request.registers.ata.command = READ_SECTORS;
-40000119: c7 45 c4 20 00 00 00 movl $0x20,-0x3c(%ebp)
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-40000120: 66 8b 45 ea mov -0x16(%ebp),%ax
-40000124: 88 45 c8 mov %al,-0x38(%ebp)
- request.registers.ata.lba = lba;
-40000127: 8b 45 f0 mov -0x10(%ebp),%eax
-4000012a: 8b 55 f4 mov -0xc(%ebp),%edx
-4000012d: 89 45 cc mov %eax,-0x34(%ebp)
-40000130: 89 55 d0 mov %edx,-0x30(%ebp)
-
- request.block_count = current_count;
-40000133: 66 8b 45 ea mov -0x16(%ebp),%ax
-40000137: 66 89 45 d4 mov %ax,-0x2c(%ebp)
- request.block_size = ATA_SECTOR_SIZE;
-4000013b: 66 c7 45 d6 00 02 movw $0x200,-0x2a(%ebp)
- request.blocks_done = 0;
-40000141: 66 c7 45 d8 00 00 movw $0x0,-0x28(%ebp)
- request.buffer = current_buffer;
-40000147: 8b 45 ec mov -0x14(%ebp),%eax
-4000014a: 89 45 dc mov %eax,-0x24(%ebp)
-
- request.error = NO_ERROR;
-4000014d: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
-
- // TODO: LBA48
- // TODO: CHS
-
- // Request ausfuehren
- if (!ata_request(&request)) {
-40000154: 83 ec 0c sub $0xc,%esp
-40000157: 8d 45 b4 lea -0x4c(%ebp),%eax
-4000015a: 50 push %eax
-4000015b: e8 79 0e 00 00 call 40000fd9 <ata_request>
-40000160: 83 c4 10 add $0x10,%esp
-40000163: 85 c0 test %eax,%eax
-40000165: 75 09 jne 40000170 <ata_drv_read_sectors+0xc5>
- result = 0;
-40000167: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
- break;
-4000016e: eb 2a jmp 4000019a <ata_drv_read_sectors+0xef>
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-40000170: 0f b7 45 ea movzwl -0x16(%ebp),%eax
-40000174: c1 e0 09 shl $0x9,%eax
-40000177: 01 45 ec add %eax,-0x14(%ebp)
- count_left -= current_count;
-4000017a: 0f b7 45 ea movzwl -0x16(%ebp),%eax
-4000017e: 29 45 fc sub %eax,-0x4(%ebp)
- lba += current_count;
-40000181: 0f b7 45 ea movzwl -0x16(%ebp),%eax
-40000185: ba 00 00 00 00 mov $0x0,%edx
-4000018a: 01 45 f0 add %eax,-0x10(%ebp)
-4000018d: 11 55 f4 adc %edx,-0xc(%ebp)
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40000190: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40000194: 0f 85 47 ff ff ff jne 400000e1 <ata_drv_read_sectors+0x36>
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-4000019a: 8b 45 e4 mov -0x1c(%ebp),%eax
-}
-4000019d: c9 leave
-4000019e: c3 ret
-4000019f: 90 nop
-
-400001a0 <atapi_drv_identify>:
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
-400001a0: 55 push %ebp
-400001a1: 89 e5 mov %esp,%ebp
-400001a3: 57 push %edi
-400001a4: 81 ec 34 02 00 00 sub $0x234,%esp
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-400001aa: 8d bd cc fd ff ff lea -0x234(%ebp),%edi
-400001b0: fc cld
-400001b1: ba 00 00 00 00 mov $0x0,%edx
-400001b6: b8 0c 00 00 00 mov $0xc,%eax
-400001bb: 89 c1 mov %eax,%ecx
-400001bd: 89 d0 mov %edx,%eax
-400001bf: f3 ab rep stos %eax,%es:(%edi)
-400001c1: 8b 45 08 mov 0x8(%ebp),%eax
-400001c4: 89 85 cc fd ff ff mov %eax,-0x234(%ebp)
-400001ca: c7 85 d0 fd ff ff 01 movl $0x1,-0x230(%ebp)
-400001d1: 00 00 00
-400001d4: c6 85 d8 fd ff ff 01 movb $0x1,-0x228(%ebp)
-400001db: c7 85 dc fd ff ff a1 movl $0xa1,-0x224(%ebp)
-400001e2: 00 00 00
-400001e5: 66 c7 85 ec fd ff ff movw $0x1,-0x214(%ebp)
-400001ec: 01 00
-400001ee: 66 c7 85 ee fd ff ff movw $0x200,-0x212(%ebp)
-400001f5: 00 02
-400001f7: 8d 85 fc fd ff ff lea -0x204(%ebp),%eax
-400001fd: 89 85 f4 fd ff ff mov %eax,-0x20c(%ebp)
-
- // Request starten
- if (!ata_request(&request)) {
-40000203: 83 ec 0c sub $0xc,%esp
-40000206: 8d 85 cc fd ff ff lea -0x234(%ebp),%eax
-4000020c: 50 push %eax
-4000020d: e8 c7 0d 00 00 call 40000fd9 <ata_request>
-40000212: 83 c4 10 add $0x10,%esp
-40000215: 85 c0 test %eax,%eax
-40000217: 75 0c jne 40000225 <atapi_drv_identify+0x85>
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
-40000219: c7 85 c8 fd ff ff 00 movl $0x0,-0x238(%ebp)
-40000220: 00 00 00
-40000223: eb 11 jmp 40000236 <atapi_drv_identify+0x96>
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
-40000225: 8b 45 08 mov 0x8(%ebp),%eax
-40000228: c6 40 19 01 movb $0x1,0x19(%eax)
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-4000022c: c7 85 c8 fd ff ff 01 movl $0x1,-0x238(%ebp)
-40000233: 00 00 00
-40000236: 8b 85 c8 fd ff ff mov -0x238(%ebp),%eax
- return 1;
-4000023c: 8b 7d fc mov -0x4(%ebp),%edi
-4000023f: c9 leave
-40000240: c3 ret
-40000241: 90 nop
-40000242: 90 nop
-40000243: 90 nop
-
-40000244 <ata_bus_floating>:
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
-40000244: 55 push %ebp
-40000245: 89 e5 mov %esp,%ebp
-40000247: 83 ec 18 sub $0x18,%esp
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-4000024a: 83 ec 04 sub $0x4,%esp
-4000024d: 6a 00 push $0x0
-4000024f: 6a 06 push $0x6
-40000251: ff 75 08 pushl 0x8(%ebp)
-40000254: e8 22 00 00 00 call 4000027b <ata_reg_outb>
-40000259: 83 c4 10 add $0x10,%esp
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-4000025c: 83 ec 08 sub $0x8,%esp
-4000025f: 6a 07 push $0x7
-40000261: ff 75 08 pushl 0x8(%ebp)
-40000264: e8 af 00 00 00 call 40000318 <ata_reg_inb>
-40000269: 83 c4 10 add $0x10,%esp
-4000026c: 88 45 ff mov %al,-0x1(%ebp)
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-4000026f: 80 7d ff ff cmpb $0xff,-0x1(%ebp)
-40000273: 0f 94 c0 sete %al
-40000276: 0f b6 c0 movzbl %al,%eax
- .error = 0
-40000279: c9 leave
-4000027a: c3 ret
-
-4000027b <ata_reg_outb>:
-4000027b: 55 push %ebp
-4000027c: 89 e5 mov %esp,%ebp
-4000027e: 83 ec 18 sub $0x18,%esp
-40000281: 8b 45 0c mov 0xc(%ebp),%eax
-40000284: 8b 55 10 mov 0x10(%ebp),%edx
-40000287: 88 45 ec mov %al,-0x14(%ebp)
-4000028a: 88 55 e8 mov %dl,-0x18(%ebp)
-4000028d: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000291: 83 ec 08 sub $0x8,%esp
-40000294: 50 push %eax
-40000295: ff 75 08 pushl 0x8(%ebp)
-40000298: e8 28 00 00 00 call 400002c5 <ata_reg_base>
-4000029d: 83 c4 10 add $0x10,%esp
-400002a0: 66 89 45 fe mov %ax,-0x2(%ebp)
-400002a4: 0f b6 55 e8 movzbl -0x18(%ebp),%edx
-400002a8: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-400002ac: 83 e0 0f and $0xf,%eax
-400002af: 66 03 45 fe add -0x2(%ebp),%ax
-400002b3: 0f b7 c0 movzwl %ax,%eax
-400002b6: 83 ec 08 sub $0x8,%esp
-400002b9: 52 push %edx
-400002ba: 50 push %eax
-400002bb: e8 3c 00 00 00 call 400002fc <cdi_outb>
-400002c0: 83 c4 10 add $0x10,%esp
-400002c3: c9 leave
-400002c4: c3 ret
-
-400002c5 <ata_reg_base>:
-400002c5: 55 push %ebp
-400002c6: 89 e5 mov %esp,%ebp
-400002c8: 83 ec 08 sub $0x8,%esp
-400002cb: 8b 45 0c mov 0xc(%ebp),%eax
-400002ce: 88 45 fc mov %al,-0x4(%ebp)
-400002d1: 0f b6 45 fc movzbl -0x4(%ebp),%eax
-400002d5: 83 e0 10 and $0x10,%eax
-400002d8: 85 c0 test %eax,%eax
-400002da: 75 0f jne 400002eb <ata_reg_base+0x26>
-400002dc: 8b 45 08 mov 0x8(%ebp),%eax
-400002df: 66 8b 40 06 mov 0x6(%eax),%ax
-400002e3: 0f b7 c0 movzwl %ax,%eax
-400002e6: 89 45 f8 mov %eax,-0x8(%ebp)
-400002e9: eb 0c jmp 400002f7 <ata_reg_base+0x32>
-400002eb: 8b 45 08 mov 0x8(%ebp),%eax
-400002ee: 8b 40 08 mov 0x8(%eax),%eax
-400002f1: 0f b7 c0 movzwl %ax,%eax
-400002f4: 89 45 f8 mov %eax,-0x8(%ebp)
-400002f7: 8b 45 f8 mov -0x8(%ebp),%eax
-400002fa: c9 leave
-400002fb: c3 ret
-
-400002fc <cdi_outb>:
-{
- __asm__ ("outw %0, %1" : : "a" (_data), "Nd" (_port));
-}
-
-static inline void cdi_outb(uint16_t _port, uint8_t _data)
-{
-400002fc: 55 push %ebp
-400002fd: 89 e5 mov %esp,%ebp
-400002ff: 83 ec 08 sub $0x8,%esp
-40000302: 8b 45 08 mov 0x8(%ebp),%eax
-40000305: 8b 55 0c mov 0xc(%ebp),%edx
-40000308: 66 89 45 fc mov %ax,-0x4(%ebp)
-4000030c: 88 55 f8 mov %dl,-0x8(%ebp)
- __asm__ ("outb %0, %1" : : "a" (_data), "Nd" (_port));
-4000030f: 8a 45 f8 mov -0x8(%ebp),%al
-40000312: 8b 55 fc mov -0x4(%ebp),%edx
-40000315: ee out %al,(%dx)
-}
-40000316: c9 leave
-40000317: c3 ret
-
-40000318 <ata_reg_inb>:
-40000318: 55 push %ebp
-40000319: 89 e5 mov %esp,%ebp
-4000031b: 83 ec 18 sub $0x18,%esp
-4000031e: 8b 45 0c mov 0xc(%ebp),%eax
-40000321: 88 45 ec mov %al,-0x14(%ebp)
-40000324: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000328: 50 push %eax
-40000329: ff 75 08 pushl 0x8(%ebp)
-4000032c: e8 94 ff ff ff call 400002c5 <ata_reg_base>
-40000331: 83 c4 08 add $0x8,%esp
-40000334: 66 89 45 fe mov %ax,-0x2(%ebp)
-40000338: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-4000033c: 83 e0 0f and $0xf,%eax
-4000033f: 66 03 45 fe add -0x2(%ebp),%ax
-40000343: 0f b7 c0 movzwl %ax,%eax
-40000346: 83 ec 0c sub $0xc,%esp
-40000349: 50 push %eax
-4000034a: e8 08 00 00 00 call 40000357 <cdi_inb>
-4000034f: 83 c4 10 add $0x10,%esp
-40000352: 0f b6 c0 movzbl %al,%eax
-40000355: c9 leave
-40000356: c3 ret
-
-40000357 <cdi_inb>:
- __asm__ ("inw %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-
-static inline uint8_t cdi_inb(uint16_t _port)
-{
-40000357: 55 push %ebp
-40000358: 89 e5 mov %esp,%ebp
-4000035a: 83 ec 14 sub $0x14,%esp
-4000035d: 8b 45 08 mov 0x8(%ebp),%eax
-40000360: 66 89 45 ec mov %ax,-0x14(%ebp)
- uint8_t result;
- __asm__ ("inb %1, %0" : "=a" (result) : "Nd" (_port));
-40000364: 8b 55 ec mov -0x14(%ebp),%edx
-40000367: ec in (%dx),%al
-40000368: 88 45 ff mov %al,-0x1(%ebp)
- return result;
-4000036b: 0f b6 45 ff movzbl -0x1(%ebp),%eax
-}
-4000036f: c9 leave
-40000370: c3 ret
-
-40000371 <ata_bus_responsive_drv>:
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-40000371: 55 push %ebp
-40000372: 89 e5 mov %esp,%ebp
-40000374: 83 ec 08 sub $0x8,%esp
-
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-40000377: 83 ec 04 sub $0x4,%esp
-4000037a: 6a 10 push $0x10
-4000037c: 6a 06 push $0x6
-4000037e: ff 75 08 pushl 0x8(%ebp)
-40000381: e8 f5 fe ff ff call 4000027b <ata_reg_outb>
-40000386: 83 c4 10 add $0x10,%esp
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
-40000389: 83 ec 04 sub $0x4,%esp
-4000038c: 68 af 00 00 00 push $0xaf
-40000391: 6a 03 push $0x3
-40000393: ff 75 08 pushl 0x8(%ebp)
-40000396: e8 e0 fe ff ff call 4000027b <ata_reg_outb>
-4000039b: 83 c4 10 add $0x10,%esp
- * @param count Anzahl der Sektoren
-4000039e: 83 ec 04 sub $0x4,%esp
-400003a1: 68 bf 00 00 00 push $0xbf
-400003a6: 6a 04 push $0x4
-400003a8: ff 75 08 pushl 0x8(%ebp)
-400003ab: e8 cb fe ff ff call 4000027b <ata_reg_outb>
-400003b0: 83 c4 10 add $0x10,%esp
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-400003b3: 83 ec 04 sub $0x4,%esp
-400003b6: 68 cf 00 00 00 push $0xcf
-400003bb: 6a 05 push $0x5
-400003bd: ff 75 08 pushl 0x8(%ebp)
-400003c0: e8 b6 fe ff ff call 4000027b <ata_reg_outb>
-400003c5: 83 c4 10 add $0x10,%esp
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-400003c8: 83 ec 08 sub $0x8,%esp
-400003cb: 6a 03 push $0x3
-400003cd: ff 75 08 pushl 0x8(%ebp)
-400003d0: e8 43 ff ff ff call 40000318 <ata_reg_inb>
-400003d5: 83 c4 10 add $0x10,%esp
-400003d8: 3c af cmp $0xaf,%al
-400003da: 75 34 jne 40000410 <ata_bus_responsive_drv+0x9f>
-400003dc: 83 ec 08 sub $0x8,%esp
-400003df: 6a 04 push $0x4
-400003e1: ff 75 08 pushl 0x8(%ebp)
-400003e4: e8 2f ff ff ff call 40000318 <ata_reg_inb>
-400003e9: 83 c4 10 add $0x10,%esp
-400003ec: 3c bf cmp $0xbf,%al
-400003ee: 75 20 jne 40000410 <ata_bus_responsive_drv+0x9f>
-400003f0: 83 ec 08 sub $0x8,%esp
-400003f3: 6a 05 push $0x5
-400003f5: ff 75 08 pushl 0x8(%ebp)
-400003f8: e8 1b ff ff ff call 40000318 <ata_reg_inb>
-400003fd: 83 c4 10 add $0x10,%esp
-40000400: 3c cf cmp $0xcf,%al
-40000402: 75 0c jne 40000410 <ata_bus_responsive_drv+0x9f>
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
-40000404: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%ebp)
-4000040b: e9 9d 00 00 00 jmp 400004ad <ata_bus_responsive_drv+0x13c>
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-40000410: 83 ec 04 sub $0x4,%esp
-40000413: 6a 00 push $0x0
-40000415: 6a 06 push $0x6
-40000417: ff 75 08 pushl 0x8(%ebp)
-4000041a: e8 5c fe ff ff call 4000027b <ata_reg_outb>
-4000041f: 83 c4 10 add $0x10,%esp
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-40000422: 83 ec 04 sub $0x4,%esp
-40000425: 68 af 00 00 00 push $0xaf
-4000042a: 6a 03 push $0x3
-4000042c: ff 75 08 pushl 0x8(%ebp)
-4000042f: e8 47 fe ff ff call 4000027b <ata_reg_outb>
-40000434: 83 c4 10 add $0x10,%esp
- while (count_left > 0) {
-40000437: 83 ec 04 sub $0x4,%esp
-4000043a: 68 bf 00 00 00 push $0xbf
-4000043f: 6a 04 push $0x4
-40000441: ff 75 08 pushl 0x8(%ebp)
-40000444: e8 32 fe ff ff call 4000027b <ata_reg_outb>
-40000449: 83 c4 10 add $0x10,%esp
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-4000044c: 83 ec 04 sub $0x4,%esp
-4000044f: 68 cf 00 00 00 push $0xcf
-40000454: 6a 05 push $0x5
-40000456: ff 75 08 pushl 0x8(%ebp)
-40000459: e8 1d fe ff ff call 4000027b <ata_reg_outb>
-4000045e: 83 c4 10 add $0x10,%esp
- if (count_left > 256) {
- current_count = 256;
- } else {
-40000461: 83 ec 08 sub $0x8,%esp
-40000464: 6a 03 push $0x3
-40000466: ff 75 08 pushl 0x8(%ebp)
-40000469: e8 aa fe ff ff call 40000318 <ata_reg_inb>
-4000046e: 83 c4 10 add $0x10,%esp
-40000471: 3c af cmp $0xaf,%al
-40000473: 75 31 jne 400004a6 <ata_bus_responsive_drv+0x135>
-40000475: 83 ec 08 sub $0x8,%esp
-40000478: 6a 04 push $0x4
-4000047a: ff 75 08 pushl 0x8(%ebp)
-4000047d: e8 96 fe ff ff call 40000318 <ata_reg_inb>
-40000482: 83 c4 10 add $0x10,%esp
-40000485: 3c bf cmp $0xbf,%al
-40000487: 75 1d jne 400004a6 <ata_bus_responsive_drv+0x135>
-40000489: 83 ec 08 sub $0x8,%esp
-4000048c: 6a 05 push $0x5
-4000048e: ff 75 08 pushl 0x8(%ebp)
-40000491: e8 82 fe ff ff call 40000318 <ata_reg_inb>
-40000496: 83 c4 10 add $0x10,%esp
-40000499: 3c cf cmp $0xcf,%al
-4000049b: 75 09 jne 400004a6 <ata_bus_responsive_drv+0x135>
- current_count = count_left;
- }
-
- // Request vorbereiten
-4000049d: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%ebp)
-400004a4: eb 07 jmp 400004ad <ata_bus_responsive_drv+0x13c>
- request.dev = dev;
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
-400004a6: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-400004ad: 8b 45 fc mov -0x4(%ebp),%eax
- request.flags.direction = READ;
-400004b0: c9 leave
-400004b1: c3 ret
-
-400004b2 <ata_wait_irq>:
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-
- // Request ausfuehren
-400004b2: 55 push %ebp
-400004b3: 89 e5 mov %esp,%ebp
-400004b5: 83 ec 18 sub $0x18,%esp
- if (!ata_request(&request)) {
-400004b8: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- result = 0;
- break;
- }
-400004bf: eb 22 jmp 400004e3 <ata_wait_irq+0x31>
-
-400004c1: 83 ec 0c sub $0xc,%esp
-400004c4: 6a 14 push $0x14
-400004c6: e8 02 11 00 00 call 400015cd <cdi_sleep_ms>
-400004cb: 83 c4 10 add $0x10,%esp
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
-400004ce: 83 45 fc 14 addl $0x14,-0x4(%ebp)
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
-400004d2: 8b 45 0c mov 0xc(%ebp),%eax
-400004d5: 3b 45 fc cmp -0x4(%ebp),%eax
-400004d8: 77 09 ja 400004e3 <ata_wait_irq+0x31>
- lba += current_count;
-400004da: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400004e1: eb 12 jmp 400004f5 <ata_wait_irq+0x43>
-
- // Request ausfuehren
- if (!ata_request(&request)) {
- result = 0;
- break;
- }
-400004e3: 8b 45 08 mov 0x8(%ebp),%eax
-400004e6: 8b 40 0c mov 0xc(%eax),%eax
-400004e9: 66 85 c0 test %ax,%ax
-400004ec: 74 d3 je 400004c1 <ata_wait_irq+0xf>
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-}
-400004ee: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-400004f5: 8b 45 ec mov -0x14(%ebp),%eax
-
-400004f8: c9 leave
-400004f9: c3 ret
-
-400004fa <ata_init_controller>:
-400004fa: 55 push %ebp
-400004fb: 89 e5 mov %esp,%ebp
-400004fd: 83 ec 18 sub $0x18,%esp
-40000500: 8b 45 08 mov 0x8(%ebp),%eax
-40000503: 66 8b 40 06 mov 0x6(%eax),%ax
-40000507: 0f b7 c0 movzwl %ax,%eax
-4000050a: 83 ec 08 sub $0x8,%esp
-4000050d: 6a 08 push $0x8
-4000050f: 50 push %eax
-40000510: e8 34 10 00 00 call 40001549 <cdi_ioports_alloc>
-40000515: 83 c4 10 add $0x10,%esp
-40000518: 85 c0 test %eax,%eax
-4000051a: 74 15 je 40000531 <ata_init_controller+0x37>
-4000051c: 83 ec 0c sub $0xc,%esp
-4000051f: 68 e4 96 00 40 push $0x400096e4
-40000524: e8 10 5e 00 00 call 40006339 <printf>
-40000529: 83 c4 10 add $0x10,%esp
-4000052c: e9 0b 02 00 00 jmp 4000073c <ata_init_controller+0x242>
-40000531: 8b 45 08 mov 0x8(%ebp),%eax
-40000534: 8b 40 08 mov 0x8(%eax),%eax
-40000537: 0f b7 c0 movzwl %ax,%eax
-4000053a: 83 ec 08 sub $0x8,%esp
-4000053d: 6a 01 push $0x1
-4000053f: 50 push %eax
-40000540: e8 04 10 00 00 call 40001549 <cdi_ioports_alloc>
-40000545: 83 c4 10 add $0x10,%esp
-40000548: 85 c0 test %eax,%eax
-4000054a: 74 2d je 40000579 <ata_init_controller+0x7f>
-4000054c: 83 ec 0c sub $0xc,%esp
-4000054f: 68 e4 96 00 40 push $0x400096e4
-40000554: e8 e0 5d 00 00 call 40006339 <printf>
-40000559: 83 c4 10 add $0x10,%esp
-4000055c: 8b 45 08 mov 0x8(%ebp),%eax
-4000055f: 66 8b 40 06 mov 0x6(%eax),%ax
-40000563: 0f b7 c0 movzwl %ax,%eax
-40000566: 83 ec 08 sub $0x8,%esp
-40000569: 6a 08 push $0x8
-4000056b: 50 push %eax
-4000056c: e8 1a 10 00 00 call 4000158b <cdi_ioports_free>
-40000571: 83 c4 10 add $0x10,%esp
-40000574: e9 c3 01 00 00 jmp 4000073c <ata_init_controller+0x242>
-40000579: 8b 55 08 mov 0x8(%ebp),%edx
-4000057c: 8b 45 08 mov 0x8(%ebp),%eax
-4000057f: 89 42 28 mov %eax,0x28(%edx)
-40000582: 8b 45 08 mov 0x8(%ebp),%eax
-40000585: 83 c0 14 add $0x14,%eax
-40000588: 89 c2 mov %eax,%edx
-4000058a: 8b 45 08 mov 0x8(%ebp),%eax
-4000058d: 66 8b 40 0a mov 0xa(%eax),%ax
-40000591: 0f b6 c0 movzbl %al,%eax
-40000594: 83 ec 04 sub $0x4,%esp
-40000597: 52 push %edx
-40000598: 68 3e 07 00 40 push $0x4000073e
-4000059d: 50 push %eax
-4000059e: e8 25 0f 00 00 call 400014c8 <cdi_register_irq>
-400005a3: 83 c4 10 add $0x10,%esp
-400005a6: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-400005ad: eb 2f jmp 400005de <ata_init_controller+0xe4>
-400005af: 8b 45 f8 mov -0x8(%ebp),%eax
-400005b2: c1 e0 04 shl $0x4,%eax
-400005b5: 0f b6 c0 movzbl %al,%eax
-400005b8: 83 ec 04 sub $0x4,%esp
-400005bb: 50 push %eax
-400005bc: 6a 06 push $0x6
-400005be: ff 75 08 pushl 0x8(%ebp)
-400005c1: e8 b5 fc ff ff call 4000027b <ata_reg_outb>
-400005c6: 83 c4 10 add $0x10,%esp
-400005c9: 83 ec 04 sub $0x4,%esp
-400005cc: 6a 02 push $0x2
-400005ce: 6a 10 push $0x10
-400005d0: ff 75 08 pushl 0x8(%ebp)
-400005d3: e8 a3 fc ff ff call 4000027b <ata_reg_outb>
-400005d8: 83 c4 10 add $0x10,%esp
-400005db: ff 45 f8 incl -0x8(%ebp)
-400005de: 83 7d f8 01 cmpl $0x1,-0x8(%ebp)
-400005e2: 7e cb jle 400005af <ata_init_controller+0xb5>
-400005e4: 83 ec 0c sub $0xc,%esp
-400005e7: ff 75 08 pushl 0x8(%ebp)
-400005ea: e8 55 fc ff ff call 40000244 <ata_bus_floating>
-400005ef: 83 c4 10 add $0x10,%esp
-400005f2: 85 c0 test %eax,%eax
-400005f4: 74 1f je 40000615 <ata_init_controller+0x11b>
-400005f6: 8b 45 08 mov 0x8(%ebp),%eax
-400005f9: 8a 40 04 mov 0x4(%eax),%al
-400005fc: 0f b6 c0 movzbl %al,%eax
-400005ff: 83 ec 08 sub $0x8,%esp
-40000602: 50 push %eax
-40000603: 68 0f 97 00 40 push $0x4000970f
-40000608: e8 2c 5d 00 00 call 40006339 <printf>
-4000060d: 83 c4 10 add $0x10,%esp
-40000610: e9 27 01 00 00 jmp 4000073c <ata_init_controller+0x242>
-40000615: 83 ec 0c sub $0xc,%esp
-40000618: ff 75 08 pushl 0x8(%ebp)
-4000061b: e8 51 fd ff ff call 40000371 <ata_bus_responsive_drv>
-40000620: 83 c4 10 add $0x10,%esp
-40000623: 85 c0 test %eax,%eax
-40000625: 75 1f jne 40000646 <ata_init_controller+0x14c>
-40000627: 8b 45 08 mov 0x8(%ebp),%eax
-4000062a: 8a 40 04 mov 0x4(%eax),%al
-4000062d: 0f b6 c0 movzbl %al,%eax
-40000630: 83 ec 08 sub $0x8,%esp
-40000633: 50 push %eax
-40000634: 68 28 97 00 40 push $0x40009728
-40000639: e8 fb 5c 00 00 call 40006339 <printf>
-4000063e: 83 c4 10 add $0x10,%esp
-40000641: e9 f6 00 00 00 jmp 4000073c <ata_init_controller+0x242>
-40000646: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-4000064d: e9 e0 00 00 00 jmp 40000732 <ata_init_controller+0x238>
-40000652: 83 ec 0c sub $0xc,%esp
-40000655: 6a 24 push $0x24
-40000657: e8 7c 7c 00 00 call 400082d8 <malloc>
-4000065c: 83 c4 10 add $0x10,%esp
-4000065f: 89 45 fc mov %eax,-0x4(%ebp)
-40000662: 8b 55 fc mov -0x4(%ebp),%edx
-40000665: 8b 45 08 mov 0x8(%ebp),%eax
-40000668: 89 42 14 mov %eax,0x14(%edx)
-4000066b: 8b 45 f8 mov -0x8(%ebp),%eax
-4000066e: 88 c2 mov %al,%dl
-40000670: 8b 45 fc mov -0x4(%ebp),%eax
-40000673: 88 50 18 mov %dl,0x18(%eax)
-40000676: 83 ec 0c sub $0xc,%esp
-40000679: ff 75 fc pushl -0x4(%ebp)
-4000067c: e8 7f f9 ff ff call 40000000 <ata_drv_identify>
-40000681: 83 c4 10 add $0x10,%esp
-40000684: 85 c0 test %eax,%eax
-40000686: 0f 84 95 00 00 00 je 40000721 <ata_init_controller+0x227>
-4000068c: 8b 45 fc mov -0x4(%ebp),%eax
-4000068f: 8a 40 19 mov 0x19(%eax),%al
-40000692: 0f b6 d0 movzbl %al,%edx
-40000695: 8b 45 08 mov 0x8(%ebp),%eax
-40000698: 8a 40 04 mov 0x4(%eax),%al
-4000069b: 0f b6 c0 movzbl %al,%eax
-4000069e: 52 push %edx
-4000069f: ff 75 f8 pushl -0x8(%ebp)
-400006a2: 50 push %eax
-400006a3: 68 4c 97 00 40 push $0x4000974c
-400006a8: e8 8c 5c 00 00 call 40006339 <printf>
-400006ad: 83 c4 10 add $0x10,%esp
-400006b0: 8b 45 fc mov -0x4(%ebp),%eax
-400006b3: 8a 40 19 mov 0x19(%eax),%al
-400006b6: 84 c0 test %al,%al
-400006b8: 75 2d jne 400006e7 <ata_init_controller+0x1ed>
-400006ba: 8b 45 fc mov -0x4(%ebp),%eax
-400006bd: c7 40 1c ab 00 00 40 movl $0x400000ab,0x1c(%eax)
-400006c4: 8b 45 08 mov 0x8(%ebp),%eax
-400006c7: 8a 40 04 mov 0x4(%eax),%al
-400006ca: 0f b6 d0 movzbl %al,%edx
-400006cd: 8b 45 fc mov -0x4(%ebp),%eax
-400006d0: 83 c0 04 add $0x4,%eax
-400006d3: ff 75 f8 pushl -0x8(%ebp)
-400006d6: 52 push %edx
-400006d7: 68 69 97 00 40 push $0x40009769
-400006dc: 50 push %eax
-400006dd: e8 84 3d 00 00 call 40004466 <asprintf>
-400006e2: 83 c4 10 add $0x10,%esp
-400006e5: eb 21 jmp 40000708 <ata_init_controller+0x20e>
-400006e7: 8b 45 08 mov 0x8(%ebp),%eax
-400006ea: 8a 40 04 mov 0x4(%eax),%al
-400006ed: 0f b6 d0 movzbl %al,%edx
-400006f0: 8b 45 fc mov -0x4(%ebp),%eax
-400006f3: 83 c0 04 add $0x4,%eax
-400006f6: ff 75 f8 pushl -0x8(%ebp)
-400006f9: 52 push %edx
-400006fa: 68 75 97 00 40 push $0x40009775
-400006ff: 50 push %eax
-40000700: e8 61 3d 00 00 call 40004466 <asprintf>
-40000705: 83 c4 10 add $0x10,%esp
-40000708: 8b 45 08 mov 0x8(%ebp),%eax
-4000070b: 8b 00 mov (%eax),%eax
-4000070d: 8b 40 08 mov 0x8(%eax),%eax
-40000710: 83 ec 08 sub $0x8,%esp
-40000713: ff 75 fc pushl -0x4(%ebp)
-40000716: 50 push %eax
-40000717: e8 b9 0c 00 00 call 400013d5 <cdi_list_push>
-4000071c: 83 c4 10 add $0x10,%esp
-4000071f: eb 0e jmp 4000072f <ata_init_controller+0x235>
-40000721: 83 ec 0c sub $0xc,%esp
-40000724: ff 75 fc pushl -0x4(%ebp)
-40000727: e8 83 82 00 00 call 400089af <free>
-4000072c: 83 c4 10 add $0x10,%esp
-4000072f: ff 4d f8 decl -0x8(%ebp)
-40000732: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40000736: 0f 89 16 ff ff ff jns 40000652 <ata_init_controller+0x158>
-4000073c: c9 leave
-4000073d: c3 ret
-
-4000073e <ata_controller_irq>:
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-4000073e: 55 push %ebp
-4000073f: 89 e5 mov %esp,%ebp
-40000741: 83 ec 10 sub $0x10,%esp
- // 0 steht.
-40000744: 8b 45 08 mov 0x8(%ebp),%eax
-40000747: 89 45 f8 mov %eax,-0x8(%ebp)
- request.registers.ata.count = (uint8_t) current_count;
-4000074a: 8b 45 f8 mov -0x8(%ebp),%eax
-4000074d: 8b 40 14 mov 0x14(%eax),%eax
-40000750: 89 45 fc mov %eax,-0x4(%ebp)
- request.registers.ata.lba = lba;
-
-40000753: 8b 45 fc mov -0x4(%ebp),%eax
-40000756: 8b 40 0c mov 0xc(%eax),%eax
-40000759: 8d 50 01 lea 0x1(%eax),%edx
-4000075c: 8b 45 fc mov -0x4(%ebp),%eax
-4000075f: 66 89 50 0c mov %dx,0xc(%eax)
- request.block_count = current_count;
-40000763: c9 leave
-40000764: c3 ret
-
-40000765 <ata_remove_controller>:
-40000765: 55 push %ebp
-40000766: 89 e5 mov %esp,%ebp
-40000768: c9 leave
-40000769: c3 ret
-
-4000076a <ata_init_device>:
-4000076a: 55 push %ebp
-4000076b: 89 e5 mov %esp,%ebp
-4000076d: c9 leave
-4000076e: c3 ret
-
-4000076f <ata_remove_device>:
-4000076f: 55 push %ebp
-40000770: 89 e5 mov %esp,%ebp
-40000772: c9 leave
-40000773: c3 ret
-
-40000774 <ata_read_blocks>:
-40000774: 55 push %ebp
-40000775: 89 e5 mov %esp,%ebp
-40000777: 53 push %ebx
-40000778: 83 ec 34 sub $0x34,%esp
-4000077b: 8b 45 0c mov 0xc(%ebp),%eax
-4000077e: 89 45 e0 mov %eax,-0x20(%ebp)
-40000781: 8b 45 10 mov 0x10(%ebp),%eax
-40000784: 89 45 e4 mov %eax,-0x1c(%ebp)
-40000787: 8b 45 14 mov 0x14(%ebp),%eax
-4000078a: 89 45 d8 mov %eax,-0x28(%ebp)
-4000078d: 8b 45 18 mov 0x18(%ebp),%eax
-40000790: 89 45 dc mov %eax,-0x24(%ebp)
-40000793: 8b 45 08 mov 0x8(%ebp),%eax
-40000796: 89 45 f4 mov %eax,-0xc(%ebp)
-40000799: 8b 45 f4 mov -0xc(%ebp),%eax
-4000079c: 8b 40 1c mov 0x1c(%eax),%eax
-4000079f: 85 c0 test %eax,%eax
-400007a1: 75 09 jne 400007ac <ata_read_blocks+0x38>
-400007a3: c7 45 d4 ff ff ff ff movl $0xffffffff,-0x2c(%ebp)
-400007aa: eb 31 jmp 400007dd <ata_read_blocks+0x69>
-400007ac: 8b 45 f4 mov -0xc(%ebp),%eax
-400007af: 8b 58 1c mov 0x1c(%eax),%ebx
-400007b2: 8b 4d d8 mov -0x28(%ebp),%ecx
-400007b5: 8b 45 e0 mov -0x20(%ebp),%eax
-400007b8: 8b 55 e4 mov -0x1c(%ebp),%edx
-400007bb: 83 c0 01 add $0x1,%eax
-400007be: 83 d2 00 adc $0x0,%edx
-400007c1: 83 ec 0c sub $0xc,%esp
-400007c4: ff 75 1c pushl 0x1c(%ebp)
-400007c7: 51 push %ecx
-400007c8: 52 push %edx
-400007c9: 50 push %eax
-400007ca: ff 75 f4 pushl -0xc(%ebp)
-400007cd: ff d3 call *%ebx
-400007cf: 83 c4 20 add $0x20,%esp
-400007d2: 85 c0 test %eax,%eax
-400007d4: 0f 94 c0 sete %al
-400007d7: 0f b6 c0 movzbl %al,%eax
-400007da: 89 45 d4 mov %eax,-0x2c(%ebp)
-400007dd: 8b 45 d4 mov -0x2c(%ebp),%eax
-400007e0: 8b 5d fc mov -0x4(%ebp),%ebx
-400007e3: c9 leave
-400007e4: c3 ret
-
-400007e5 <ata_write_blocks>:
-400007e5: 55 push %ebp
-400007e6: 89 e5 mov %esp,%ebp
-400007e8: 53 push %ebx
-400007e9: 83 ec 34 sub $0x34,%esp
-400007ec: 8b 45 0c mov 0xc(%ebp),%eax
-400007ef: 89 45 e0 mov %eax,-0x20(%ebp)
-400007f2: 8b 45 10 mov 0x10(%ebp),%eax
-400007f5: 89 45 e4 mov %eax,-0x1c(%ebp)
-400007f8: 8b 45 14 mov 0x14(%ebp),%eax
-400007fb: 89 45 d8 mov %eax,-0x28(%ebp)
-400007fe: 8b 45 18 mov 0x18(%ebp),%eax
-40000801: 89 45 dc mov %eax,-0x24(%ebp)
-40000804: 8b 45 08 mov 0x8(%ebp),%eax
-40000807: 89 45 f4 mov %eax,-0xc(%ebp)
-4000080a: 8b 45 f4 mov -0xc(%ebp),%eax
-4000080d: 8b 40 20 mov 0x20(%eax),%eax
-40000810: 85 c0 test %eax,%eax
-40000812: 75 09 jne 4000081d <ata_write_blocks+0x38>
-40000814: c7 45 d4 ff ff ff ff movl $0xffffffff,-0x2c(%ebp)
-4000081b: eb 31 jmp 4000084e <ata_write_blocks+0x69>
-4000081d: 8b 45 f4 mov -0xc(%ebp),%eax
-40000820: 8b 58 20 mov 0x20(%eax),%ebx
-40000823: 8b 4d d8 mov -0x28(%ebp),%ecx
-40000826: 8b 45 e0 mov -0x20(%ebp),%eax
-40000829: 8b 55 e4 mov -0x1c(%ebp),%edx
-4000082c: 83 c0 01 add $0x1,%eax
-4000082f: 83 d2 00 adc $0x0,%edx
-40000832: 83 ec 0c sub $0xc,%esp
-40000835: ff 75 1c pushl 0x1c(%ebp)
-40000838: 51 push %ecx
-40000839: 52 push %edx
-4000083a: 50 push %eax
-4000083b: ff 75 f4 pushl -0xc(%ebp)
-4000083e: ff d3 call *%ebx
-40000840: 83 c4 20 add $0x20,%esp
-40000843: 85 c0 test %eax,%eax
-40000845: 0f 94 c0 sete %al
-40000848: 0f b6 c0 movzbl %al,%eax
-4000084b: 89 45 d4 mov %eax,-0x2c(%ebp)
-4000084e: 8b 45 d4 mov -0x2c(%ebp),%eax
-40000851: 8b 5d fc mov -0x4(%ebp),%ebx
-40000854: c9 leave
-40000855: c3 ret
-40000856: 90 nop
-40000857: 90 nop
-
-40000858 <main>:
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40000858: 8d 4c 24 04 lea 0x4(%esp),%ecx
-4000085c: 83 e4 f0 and $0xfffffff0,%esp
-4000085f: ff 71 fc pushl -0x4(%ecx)
-40000862: 55 push %ebp
-40000863: 89 e5 mov %esp,%ebp
-40000865: 51 push %ecx
-40000866: 83 ec 04 sub $0x4,%esp
- .registers.ata.command = IDENTIFY_DEVICE,
-40000869: e8 ee 09 00 00 call 4000125c <cdi_init>
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-4000086e: 83 ec 0c sub $0xc,%esp
-40000871: 68 c8 00 00 00 push $0xc8
-40000876: e8 75 28 00 00 call 400030f0 <msleep>
-4000087b: 83 c4 10 add $0x10,%esp
- .buffer = buffer,
-4000087e: e8 23 00 00 00 call 400008a6 <ata_driver_init>
-
-40000883: b8 80 a0 00 40 mov $0x4000a080,%eax
-40000888: 83 ec 0c sub $0xc,%esp
-4000088b: 50 push %eax
-4000088c: e8 81 0d 00 00 call 40001612 <cdi_storage_driver_register>
-40000891: 83 c4 10 add $0x10,%esp
- .error = 0
- };
-
-40000894: e8 31 0a 00 00 call 400012ca <cdi_run_drivers>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40000899: b8 00 00 00 00 mov $0x0,%eax
- // IDENTIFY PACKET DEVICE probieren.
-4000089e: 8b 4d fc mov -0x4(%ebp),%ecx
-400008a1: c9 leave
-400008a2: 8d 61 fc lea -0x4(%ecx),%esp
-400008a5: c3 ret
-
-400008a6 <ata_driver_init>:
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
-400008a6: 55 push %ebp
-400008a7: 89 e5 mov %esp,%ebp
-400008a9: 83 ec 18 sub $0x18,%esp
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-400008ac: b8 80 a0 00 40 mov $0x4000a080,%eax
-400008b1: 83 ec 0c sub $0xc,%esp
-400008b4: 50 push %eax
-400008b5: e8 2a 0d 00 00 call 400015e4 <cdi_storage_driver_init>
-400008ba: 83 c4 10 add $0x10,%esp
-
-/**
- * Sektoren von einem ATA-Geraet lesen
-400008bd: a1 00 a0 00 40 mov 0x4000a000,%eax
-400008c2: a3 84 a0 00 40 mov %eax,0x4000a084
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
-400008c7: c7 05 94 a0 00 40 c1 movl $0x400009c1,0x4000a094
-400008ce: 09 00 40
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-400008d1: c7 05 8c a0 00 40 6a movl $0x4000076a,0x4000a08c
-400008d8: 07 00 40
- *
-400008db: c7 05 90 a0 00 40 6f movl $0x4000076f,0x4000a090
-400008e2: 07 00 40
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-400008e5: c7 05 98 a0 00 40 74 movl $0x40000774,0x4000a098
-400008ec: 07 00 40
- */
-400008ef: c7 05 9c a0 00 40 e5 movl $0x400007e5,0x4000a09c
-400008f6: 07 00 40
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-400008f9: e8 ae 0a 00 00 call 400013ac <cdi_list_create>
-400008fe: a3 60 a0 00 40 mov %eax,0x4000a060
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-40000903: 83 ec 0c sub $0xc,%esp
-40000906: 6a 38 push $0x38
-40000908: e8 cb 79 00 00 call 400082d8 <malloc>
-4000090d: 83 c4 10 add $0x10,%esp
-40000910: 89 45 fc mov %eax,-0x4(%ebp)
- uint16_t current_count;
-40000913: 8b 45 fc mov -0x4(%ebp),%eax
-40000916: 66 c7 40 06 f0 01 movw $0x1f0,0x6(%eax)
- void* current_buffer = buffer;
-4000091c: 8b 45 fc mov -0x4(%ebp),%eax
-4000091f: 66 c7 40 08 f6 03 movw $0x3f6,0x8(%eax)
- uint64_t lba = start;
-40000925: 8b 45 fc mov -0x4(%ebp),%eax
-40000928: 66 c7 40 0a 0e 00 movw $0xe,0xa(%eax)
-
-4000092e: 8b 45 fc mov -0x4(%ebp),%eax
-40000931: c6 40 04 00 movb $0x0,0x4(%eax)
- // Anzahl der Sektoren die noch uebrig sind
-40000935: ba 80 a0 00 40 mov $0x4000a080,%edx
-4000093a: 8b 45 fc mov -0x4(%ebp),%eax
-4000093d: 89 10 mov %edx,(%eax)
- size_t count_left = count;
-4000093f: 83 ec 0c sub $0xc,%esp
-40000942: ff 75 fc pushl -0x4(%ebp)
-40000945: e8 b0 fb ff ff call 400004fa <ata_init_controller>
-4000094a: 83 c4 10 add $0x10,%esp
-
-4000094d: a1 60 a0 00 40 mov 0x4000a060,%eax
-40000952: 83 ec 08 sub $0x8,%esp
-40000955: ff 75 fc pushl -0x4(%ebp)
-40000958: 50 push %eax
-40000959: e8 77 0a 00 00 call 400013d5 <cdi_list_push>
-4000095e: 83 c4 10 add $0x10,%esp
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40000961: 83 ec 0c sub $0xc,%esp
-40000964: 6a 38 push $0x38
-40000966: e8 6d 79 00 00 call 400082d8 <malloc>
-4000096b: 83 c4 10 add $0x10,%esp
-4000096e: 89 45 fc mov %eax,-0x4(%ebp)
- if (count_left > 256) {
-40000971: 8b 45 fc mov -0x4(%ebp),%eax
-40000974: 66 c7 40 06 70 01 movw $0x170,0x6(%eax)
- current_count = 256;
-4000097a: 8b 45 fc mov -0x4(%ebp),%eax
-4000097d: 66 c7 40 08 76 03 movw $0x376,0x8(%eax)
- } else {
-40000983: 8b 45 fc mov -0x4(%ebp),%eax
-40000986: 66 c7 40 0a 0f 00 movw $0xf,0xa(%eax)
- current_count = count_left;
-4000098c: 8b 45 fc mov -0x4(%ebp),%eax
-4000098f: c6 40 04 01 movb $0x1,0x4(%eax)
- }
-40000993: ba 80 a0 00 40 mov $0x4000a080,%edx
-40000998: 8b 45 fc mov -0x4(%ebp),%eax
-4000099b: 89 10 mov %edx,(%eax)
-
-4000099d: 83 ec 0c sub $0xc,%esp
-400009a0: ff 75 fc pushl -0x4(%ebp)
-400009a3: e8 52 fb ff ff call 400004fa <ata_init_controller>
-400009a8: 83 c4 10 add $0x10,%esp
- // Request vorbereiten
-400009ab: a1 60 a0 00 40 mov 0x4000a060,%eax
-400009b0: 83 ec 08 sub $0x8,%esp
-400009b3: ff 75 fc pushl -0x4(%ebp)
-400009b6: 50 push %eax
-400009b7: e8 19 0a 00 00 call 400013d5 <cdi_list_push>
-400009bc: 83 c4 10 add $0x10,%esp
- request.dev = dev;
-400009bf: c9 leave
-400009c0: c3 ret
-
-400009c1 <ata_driver_destroy>:
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
- request.flags.poll = 1;
- request.flags.ata = 0;
-400009c1: 55 push %ebp
-400009c2: 89 e5 mov %esp,%ebp
-400009c4: 83 ec 08 sub $0x8,%esp
- request.flags.lba = 1;
-400009c7: b8 80 a0 00 40 mov $0x4000a080,%eax
-400009cc: 83 ec 0c sub $0xc,%esp
-400009cf: 50 push %eax
-400009d0: e8 26 0c 00 00 call 400015fb <cdi_storage_driver_destroy>
-400009d5: 83 c4 10 add $0x10,%esp
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
-400009d8: c9 leave
-400009d9: c3 ret
-400009da: 90 nop
-400009db: 90 nop
-
-400009dc <ata_request_command>:
-
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
-400009dc: 55 push %ebp
-400009dd: 89 e5 mov %esp,%ebp
-400009df: 83 ec 18 sub $0x18,%esp
- *
-400009e2: 8b 45 08 mov 0x8(%ebp),%eax
-400009e5: 8b 00 mov (%eax),%eax
-400009e7: 89 45 f4 mov %eax,-0xc(%ebp)
- * @param start LBA des Startsektors
-400009ea: 8b 45 f4 mov -0xc(%ebp),%eax
-400009ed: 8b 40 14 mov 0x14(%eax),%eax
-400009f0: 89 45 f8 mov %eax,-0x8(%ebp)
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-400009f3: 8b 45 f8 mov -0x8(%ebp),%eax
-400009f6: 66 c7 40 0c 00 00 movw $0x0,0xc(%eax)
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-400009fc: 83 ec 0c sub $0xc,%esp
-400009ff: ff 75 f4 pushl -0xc(%ebp)
-40000a02: e8 47 01 00 00 call 40000b4e <ata_drv_select>
-40000a07: 83 c4 10 add $0x10,%esp
-{
- int result = 1;
- struct ata_request request;
-40000a0a: 83 ec 04 sub $0x4,%esp
-40000a0d: 68 f4 01 00 00 push $0x1f4
-40000a12: 6a 00 push $0x0
-40000a14: ff 75 f4 pushl -0xc(%ebp)
-40000a17: e8 5b 01 00 00 call 40000b77 <ata_drv_wait_ready>
-40000a1c: 83 c4 10 add $0x10,%esp
-40000a1f: 85 c0 test %eax,%eax
-40000a21: 75 16 jne 40000a39 <ata_request_command+0x5d>
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-40000a23: 8b 45 08 mov 0x8(%ebp),%eax
-40000a26: c7 40 2c 01 00 00 00 movl $0x1,0x2c(%eax)
- // muss unter Umstaenden mehrmals gelesen werden.
-40000a2d: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40000a34: e9 10 01 00 00 jmp 40000b49 <ata_request_command+0x16d>
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-40000a39: 8b 45 08 mov 0x8(%ebp),%eax
-40000a3c: 8a 40 0e mov 0xe(%eax),%al
-40000a3f: 0f b6 c0 movzbl %al,%eax
-40000a42: c1 e0 08 shl $0x8,%eax
-40000a45: 88 c2 mov %al,%dl
-40000a47: 8b 45 08 mov 0x8(%ebp),%eax
-40000a4a: 8b 00 mov (%eax),%eax
-40000a4c: 8a 40 18 mov 0x18(%eax),%al
-40000a4f: 0f b6 c0 movzbl %al,%eax
-40000a52: c1 e0 04 shl $0x4,%eax
-40000a55: 09 d0 or %edx,%eax
-40000a57: 88 c1 mov %al,%cl
-40000a59: 8b 45 08 mov 0x8(%ebp),%eax
-40000a5c: 8b 50 1c mov 0x1c(%eax),%edx
-40000a5f: 8b 40 18 mov 0x18(%eax),%eax
-40000a62: 0f ac d0 18 shrd $0x18,%edx,%eax
-40000a66: c1 ea 18 shr $0x18,%edx
-40000a69: 83 e0 0f and $0xf,%eax
-40000a6c: 09 c8 or %ecx,%eax
-40000a6e: 0f b6 c0 movzbl %al,%eax
-40000a71: 83 ec 04 sub $0x4,%esp
-40000a74: 50 push %eax
-40000a75: 6a 06 push $0x6
-40000a77: ff 75 f8 pushl -0x8(%ebp)
-40000a7a: e8 17 02 00 00 call 40000c96 <ata_reg_outb>
-40000a7f: 83 c4 10 add $0x10,%esp
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40000a82: c6 45 ff 00 movb $0x0,-0x1(%ebp)
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40000a86: 8b 45 08 mov 0x8(%ebp),%eax
-40000a89: 8a 40 0c mov 0xc(%eax),%al
-40000a8c: 84 c0 test %al,%al
-40000a8e: 74 04 je 40000a94 <ata_request_command+0xb8>
- if (count_left > 256) {
- current_count = 256;
-40000a90: 80 4d ff 02 orb $0x2,-0x1(%ebp)
- } else {
- current_count = count_left;
- }
-40000a94: 0f b6 45 ff movzbl -0x1(%ebp),%eax
-40000a98: 83 ec 04 sub $0x4,%esp
-40000a9b: 50 push %eax
-40000a9c: 6a 10 push $0x10
-40000a9e: ff 75 f8 pushl -0x8(%ebp)
-40000aa1: e8 f0 01 00 00 call 40000c96 <ata_reg_outb>
-40000aa6: 83 c4 10 add $0x10,%esp
-
- // Request vorbereiten
- request.dev = dev;
-40000aa9: 8b 45 08 mov 0x8(%ebp),%eax
-40000aac: 8a 40 14 mov 0x14(%eax),%al
-40000aaf: 0f b6 c0 movzbl %al,%eax
-40000ab2: 83 ec 04 sub $0x4,%esp
-40000ab5: 50 push %eax
-40000ab6: 6a 02 push $0x2
-40000ab8: ff 75 f8 pushl -0x8(%ebp)
-40000abb: e8 d6 01 00 00 call 40000c96 <ata_reg_outb>
-40000ac0: 83 c4 10 add $0x10,%esp
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
-40000ac3: 8b 45 08 mov 0x8(%ebp),%eax
-40000ac6: 8b 50 1c mov 0x1c(%eax),%edx
-40000ac9: 8b 40 18 mov 0x18(%eax),%eax
-40000acc: 0f b6 c0 movzbl %al,%eax
-40000acf: 83 ec 04 sub $0x4,%esp
-40000ad2: 50 push %eax
-40000ad3: 6a 03 push $0x3
-40000ad5: ff 75 f8 pushl -0x8(%ebp)
-40000ad8: e8 b9 01 00 00 call 40000c96 <ata_reg_outb>
-40000add: 83 c4 10 add $0x10,%esp
- // FIXME
-40000ae0: 8b 45 08 mov 0x8(%ebp),%eax
-40000ae3: 8b 50 1c mov 0x1c(%eax),%edx
-40000ae6: 8b 40 18 mov 0x18(%eax),%eax
-40000ae9: 0f ac d0 08 shrd $0x8,%edx,%eax
-40000aed: c1 ea 08 shr $0x8,%edx
-40000af0: 0f b6 c0 movzbl %al,%eax
-40000af3: 83 ec 04 sub $0x4,%esp
-40000af6: 50 push %eax
-40000af7: 6a 04 push $0x4
-40000af9: ff 75 f8 pushl -0x8(%ebp)
-40000afc: e8 95 01 00 00 call 40000c96 <ata_reg_outb>
-40000b01: 83 c4 10 add $0x10,%esp
- request.flags.poll = 1;
-40000b04: 8b 45 08 mov 0x8(%ebp),%eax
-40000b07: 8b 50 1c mov 0x1c(%eax),%edx
-40000b0a: 8b 40 18 mov 0x18(%eax),%eax
-40000b0d: 0f ac d0 10 shrd $0x10,%edx,%eax
-40000b11: c1 ea 10 shr $0x10,%edx
-40000b14: 0f b6 c0 movzbl %al,%eax
-40000b17: 83 ec 04 sub $0x4,%esp
-40000b1a: 50 push %eax
-40000b1b: 6a 05 push $0x5
-40000b1d: ff 75 f8 pushl -0x8(%ebp)
-40000b20: e8 71 01 00 00 call 40000c96 <ata_reg_outb>
-40000b25: 83 c4 10 add $0x10,%esp
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
-40000b28: 8b 45 08 mov 0x8(%ebp),%eax
-40000b2b: 8b 40 10 mov 0x10(%eax),%eax
-40000b2e: 0f b6 c0 movzbl %al,%eax
-40000b31: 83 ec 04 sub $0x4,%esp
-40000b34: 50 push %eax
-40000b35: 6a 07 push $0x7
-40000b37: ff 75 f8 pushl -0x8(%ebp)
-40000b3a: e8 57 01 00 00 call 40000c96 <ata_reg_outb>
-40000b3f: 83 c4 10 add $0x10,%esp
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
-40000b42: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-40000b49: 8b 45 ec mov -0x14(%ebp),%eax
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40000b4c: c9 leave
-40000b4d: c3 ret
-
-40000b4e <ata_drv_select>:
-40000b4e: 55 push %ebp
-40000b4f: 89 e5 mov %esp,%ebp
-40000b51: 83 ec 08 sub $0x8,%esp
-40000b54: 8b 45 08 mov 0x8(%ebp),%eax
-40000b57: 8a 40 18 mov 0x18(%eax),%al
-40000b5a: c1 e0 04 shl $0x4,%eax
-40000b5d: 0f b6 d0 movzbl %al,%edx
-40000b60: 8b 45 08 mov 0x8(%ebp),%eax
-40000b63: 8b 40 14 mov 0x14(%eax),%eax
-40000b66: 83 ec 04 sub $0x4,%esp
-40000b69: 52 push %edx
-40000b6a: 6a 06 push $0x6
-40000b6c: 50 push %eax
-40000b6d: e8 24 01 00 00 call 40000c96 <ata_reg_outb>
-40000b72: 83 c4 10 add $0x10,%esp
-40000b75: c9 leave
-40000b76: c3 ret
-
-40000b77 <ata_drv_wait_ready>:
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
-40000b77: 55 push %ebp
-40000b78: 89 e5 mov %esp,%ebp
-40000b7a: 83 ec 18 sub $0x18,%esp
-40000b7d: 8b 45 0c mov 0xc(%ebp),%eax
-40000b80: 88 45 ec mov %al,-0x14(%ebp)
- struct ata_request request = {
-40000b83: 8b 45 08 mov 0x8(%ebp),%eax
-40000b86: 8b 40 14 mov 0x14(%eax),%eax
-40000b89: 89 45 f8 mov %eax,-0x8(%ebp)
- .dev = dev,
-40000b8c: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40000b93: eb 11 jmp 40000ba6 <ata_drv_wait_ready+0x2f>
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40000b95: 83 45 fc 0a addl $0xa,-0x4(%ebp)
- .registers.ata.command = IDENTIFY_DEVICE,
-40000b99: 83 ec 0c sub $0xc,%esp
-40000b9c: 6a 0a push $0xa
-40000b9e: e8 2a 0a 00 00 call 400015cd <cdi_sleep_ms>
-40000ba3: 83 c4 10 add $0x10,%esp
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40000ba6: 83 ec 08 sub $0x8,%esp
-40000ba9: 6a 07 push $0x7
-40000bab: ff 75 f8 pushl -0x8(%ebp)
-40000bae: e8 50 00 00 00 call 40000c03 <ata_reg_inb>
-40000bb3: 83 c4 10 add $0x10,%esp
-40000bb6: 84 c0 test %al,%al
-40000bb8: 79 1b jns 40000bd5 <ata_drv_wait_ready+0x5e>
-40000bba: 8b 45 fc mov -0x4(%ebp),%eax
-40000bbd: 3b 45 10 cmp 0x10(%ebp),%eax
-40000bc0: 72 d3 jb 40000b95 <ata_drv_wait_ready+0x1e>
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-
-40000bc2: eb 11 jmp 40000bd5 <ata_drv_wait_ready+0x5e>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40000bc4: 83 45 fc 0a addl $0xa,-0x4(%ebp)
- // IDENTIFY PACKET DEVICE probieren.
-40000bc8: 83 ec 0c sub $0xc,%esp
-40000bcb: 6a 0a push $0xa
-40000bcd: e8 fb 09 00 00 call 400015cd <cdi_sleep_ms>
-40000bd2: 83 c4 10 add $0x10,%esp
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-
-40000bd5: 83 ec 08 sub $0x8,%esp
-40000bd8: 6a 07 push $0x7
-40000bda: ff 75 f8 pushl -0x8(%ebp)
-40000bdd: e8 21 00 00 00 call 40000c03 <ata_reg_inb>
-40000be2: 83 c4 10 add $0x10,%esp
-40000be5: 23 45 ec and -0x14(%ebp),%eax
-40000be8: 3a 45 ec cmp -0x14(%ebp),%al
-40000beb: 74 08 je 40000bf5 <ata_drv_wait_ready+0x7e>
-40000bed: 8b 45 fc mov -0x4(%ebp),%eax
-40000bf0: 3b 45 10 cmp 0x10(%ebp),%eax
-40000bf3: 72 cf jb 40000bc4 <ata_drv_wait_ready+0x4d>
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
-40000bf5: 8b 45 fc mov -0x4(%ebp),%eax
-40000bf8: 3b 45 10 cmp 0x10(%ebp),%eax
-40000bfb: 0f 92 c0 setb %al
-40000bfe: 0f b6 c0 movzbl %al,%eax
- // Ein ATA-Geraet
-40000c01: c9 leave
-40000c02: c3 ret
-
-40000c03 <ata_reg_inb>:
-40000c03: 55 push %ebp
-40000c04: 89 e5 mov %esp,%ebp
-40000c06: 83 ec 18 sub $0x18,%esp
-40000c09: 8b 45 0c mov 0xc(%ebp),%eax
-40000c0c: 88 45 ec mov %al,-0x14(%ebp)
-40000c0f: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000c13: 83 ec 08 sub $0x8,%esp
-40000c16: 50 push %eax
-40000c17: ff 75 08 pushl 0x8(%ebp)
-40000c1a: e8 26 00 00 00 call 40000c45 <ata_reg_base>
-40000c1f: 83 c4 10 add $0x10,%esp
-40000c22: 66 89 45 fe mov %ax,-0x2(%ebp)
-40000c26: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000c2a: 83 e0 0f and $0xf,%eax
-40000c2d: 66 03 45 fe add -0x2(%ebp),%ax
-40000c31: 0f b7 c0 movzwl %ax,%eax
-40000c34: 83 ec 0c sub $0xc,%esp
-40000c37: 50 push %eax
-40000c38: e8 3f 00 00 00 call 40000c7c <cdi_inb>
-40000c3d: 83 c4 10 add $0x10,%esp
-40000c40: 0f b6 c0 movzbl %al,%eax
-40000c43: c9 leave
-40000c44: c3 ret
-
-40000c45 <ata_reg_base>:
-40000c45: 55 push %ebp
-40000c46: 89 e5 mov %esp,%ebp
-40000c48: 83 ec 08 sub $0x8,%esp
-40000c4b: 8b 45 0c mov 0xc(%ebp),%eax
-40000c4e: 88 45 fc mov %al,-0x4(%ebp)
-40000c51: 0f b6 45 fc movzbl -0x4(%ebp),%eax
-40000c55: 83 e0 10 and $0x10,%eax
-40000c58: 85 c0 test %eax,%eax
-40000c5a: 75 0f jne 40000c6b <ata_reg_base+0x26>
-40000c5c: 8b 45 08 mov 0x8(%ebp),%eax
-40000c5f: 66 8b 40 06 mov 0x6(%eax),%ax
-40000c63: 0f b7 c0 movzwl %ax,%eax
-40000c66: 89 45 f8 mov %eax,-0x8(%ebp)
-40000c69: eb 0c jmp 40000c77 <ata_reg_base+0x32>
-40000c6b: 8b 45 08 mov 0x8(%ebp),%eax
-40000c6e: 8b 40 08 mov 0x8(%eax),%eax
-40000c71: 0f b7 c0 movzwl %ax,%eax
-40000c74: 89 45 f8 mov %eax,-0x8(%ebp)
-40000c77: 8b 45 f8 mov -0x8(%ebp),%eax
-40000c7a: c9 leave
-40000c7b: c3 ret
-
-40000c7c <cdi_inb>:
- __asm__ ("inw %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-
-static inline uint8_t cdi_inb(uint16_t _port)
-{
-40000c7c: 55 push %ebp
-40000c7d: 89 e5 mov %esp,%ebp
-40000c7f: 83 ec 14 sub $0x14,%esp
-40000c82: 8b 45 08 mov 0x8(%ebp),%eax
-40000c85: 66 89 45 ec mov %ax,-0x14(%ebp)
- uint8_t result;
- __asm__ ("inb %1, %0" : "=a" (result) : "Nd" (_port));
-40000c89: 8b 55 ec mov -0x14(%ebp),%edx
-40000c8c: ec in (%dx),%al
-40000c8d: 88 45 ff mov %al,-0x1(%ebp)
- return result;
-40000c90: 0f b6 45 ff movzbl -0x1(%ebp),%eax
-}
-40000c94: c9 leave
-40000c95: c3 ret
-
-40000c96 <ata_reg_outb>:
-40000c96: 55 push %ebp
-40000c97: 89 e5 mov %esp,%ebp
-40000c99: 83 ec 18 sub $0x18,%esp
-40000c9c: 8b 45 0c mov 0xc(%ebp),%eax
-40000c9f: 8b 55 10 mov 0x10(%ebp),%edx
-40000ca2: 88 45 ec mov %al,-0x14(%ebp)
-40000ca5: 88 55 e8 mov %dl,-0x18(%ebp)
-40000ca8: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000cac: 50 push %eax
-40000cad: ff 75 08 pushl 0x8(%ebp)
-40000cb0: e8 90 ff ff ff call 40000c45 <ata_reg_base>
-40000cb5: 83 c4 08 add $0x8,%esp
-40000cb8: 66 89 45 fe mov %ax,-0x2(%ebp)
-40000cbc: 0f b6 55 e8 movzbl -0x18(%ebp),%edx
-40000cc0: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000cc4: 83 e0 0f and $0xf,%eax
-40000cc7: 66 03 45 fe add -0x2(%ebp),%ax
-40000ccb: 0f b7 c0 movzwl %ax,%eax
-40000cce: 83 ec 08 sub $0x8,%esp
-40000cd1: 52 push %edx
-40000cd2: 50 push %eax
-40000cd3: e8 05 00 00 00 call 40000cdd <cdi_outb>
-40000cd8: 83 c4 10 add $0x10,%esp
-40000cdb: c9 leave
-40000cdc: c3 ret
-
-40000cdd <cdi_outb>:
-{
- __asm__ ("outw %0, %1" : : "a" (_data), "Nd" (_port));
-}
-
-static inline void cdi_outb(uint16_t _port, uint8_t _data)
-{
-40000cdd: 55 push %ebp
-40000cde: 89 e5 mov %esp,%ebp
-40000ce0: 83 ec 08 sub $0x8,%esp
-40000ce3: 8b 45 08 mov 0x8(%ebp),%eax
-40000ce6: 8b 55 0c mov 0xc(%ebp),%edx
-40000ce9: 66 89 45 fc mov %ax,-0x4(%ebp)
-40000ced: 88 55 f8 mov %dl,-0x8(%ebp)
- __asm__ ("outb %0, %1" : : "a" (_data), "Nd" (_port));
-40000cf0: 8a 45 f8 mov -0x8(%ebp),%al
-40000cf3: 8b 55 fc mov -0x4(%ebp),%edx
-40000cf6: ee out %al,(%dx)
-}
-40000cf7: c9 leave
-40000cf8: c3 ret
-
-40000cf9 <ata_protocol_non_data>:
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
-40000cf9: 55 push %ebp
-40000cfa: 89 e5 mov %esp,%ebp
-40000cfc: 83 ec 18 sub $0x18,%esp
- request.blocks_done = 0;
-40000cff: 8b 45 08 mov 0x8(%ebp),%eax
-40000d02: 8b 00 mov (%eax),%eax
-40000d04: 89 45 f0 mov %eax,-0x10(%ebp)
- request.buffer = current_buffer;
-40000d07: 8b 45 f0 mov -0x10(%ebp),%eax
-40000d0a: 8b 40 14 mov 0x14(%eax),%eax
-40000d0d: 89 45 f4 mov %eax,-0xc(%ebp)
- // TODO: LBA48
- // TODO: CHS
-
- // Request ausfuehren
- if (!ata_request(&request)) {
- result = 0;
-40000d10: 8b 45 08 mov 0x8(%ebp),%eax
-40000d13: 8a 40 0c mov 0xc(%eax),%al
-40000d16: 84 c0 test %al,%al
-40000d18: 74 09 je 40000d23 <ata_protocol_non_data+0x2a>
- break;
-40000d1a: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-40000d21: eb 07 jmp 40000d2a <ata_protocol_non_data+0x31>
- }
-
-40000d23: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
-40000d2a: 8b 45 f8 mov -0x8(%ebp),%eax
-40000d2d: 89 45 e8 mov %eax,-0x18(%ebp)
-40000d30: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
-40000d34: 74 08 je 40000d3e <ata_protocol_non_data+0x45>
-40000d36: 83 7d e8 01 cmpl $0x1,-0x18(%ebp)
-40000d3a: 74 45 je 40000d81 <ata_protocol_non_data+0x88>
-40000d3c: eb ec jmp 40000d2a <ata_protocol_non_data+0x31>
- }
-
- return result;
-40000d3e: 83 ec 08 sub $0x8,%esp
-40000d41: 68 f4 01 00 00 push $0x1f4
-40000d46: ff 75 f4 pushl -0xc(%ebp)
-40000d49: e8 64 f7 ff ff call 400004b2 <ata_wait_irq>
-40000d4e: 83 c4 10 add $0x10,%esp
-40000d51: 85 c0 test %eax,%eax
-40000d53: 74 23 je 40000d78 <ata_protocol_non_data+0x7f>
-}
-40000d55: 8b 45 08 mov 0x8(%ebp),%eax
-40000d58: c7 40 2c 02 00 00 00 movl $0x2,0x2c(%eax)
-
-40000d5f: 83 ec 0c sub $0xc,%esp
-40000d62: 68 88 97 00 40 push $0x40009788
-40000d67: e8 cd 55 00 00 call 40006339 <printf>
-40000d6c: 83 c4 10 add $0x10,%esp
-40000d6f: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40000d76: eb 39 jmp 40000db1 <ata_protocol_non_data+0xb8>
-40000d78: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-40000d7f: eb a9 jmp 40000d2a <ata_protocol_non_data+0x31>
-40000d81: 83 ec 08 sub $0x8,%esp
-40000d84: 6a 07 push $0x7
-40000d86: ff 75 f4 pushl -0xc(%ebp)
-40000d89: e8 75 fe ff ff call 40000c03 <ata_reg_inb>
-40000d8e: 83 c4 10 add $0x10,%esp
-40000d91: 88 45 ff mov %al,-0x1(%ebp)
-40000d94: 8a 45 ff mov -0x1(%ebp),%al
-40000d97: 84 c0 test %al,%al
-40000d99: 79 0f jns 40000daa <ata_protocol_non_data+0xb1>
-40000d9b: 83 ec 0c sub $0xc,%esp
-40000d9e: 6a 14 push $0x14
-40000da0: e8 28 08 00 00 call 400015cd <cdi_sleep_ms>
-40000da5: 83 c4 10 add $0x10,%esp
-40000da8: eb 80 jmp 40000d2a <ata_protocol_non_data+0x31>
-40000daa: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-40000db1: 8b 45 ec mov -0x14(%ebp),%eax
-40000db4: c9 leave
-40000db5: c3 ret
-
-40000db6 <ata_protocol_pio_in>:
-40000db6: 55 push %ebp
-40000db7: 89 e5 mov %esp,%ebp
-40000db9: 53 push %ebx
-40000dba: 83 ec 34 sub $0x34,%esp
-40000dbd: 8b 45 08 mov 0x8(%ebp),%eax
-40000dc0: 8b 00 mov (%eax),%eax
-40000dc2: 89 45 e8 mov %eax,-0x18(%ebp)
-40000dc5: 8b 45 e8 mov -0x18(%ebp),%eax
-40000dc8: 8b 40 14 mov 0x14(%eax),%eax
-40000dcb: 89 45 ec mov %eax,-0x14(%ebp)
-40000dce: 8b 45 08 mov 0x8(%ebp),%eax
-40000dd1: 8a 40 0c mov 0xc(%eax),%al
-40000dd4: 84 c0 test %al,%al
-40000dd6: 74 09 je 40000de1 <ata_protocol_pio_in+0x2b>
-40000dd8: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp)
-40000ddf: eb 07 jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000de1: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-40000de8: 8b 45 f0 mov -0x10(%ebp),%eax
-40000deb: 89 45 d4 mov %eax,-0x2c(%ebp)
-40000dee: 83 7d d4 01 cmpl $0x1,-0x2c(%ebp)
-40000df2: 74 58 je 40000e4c <ata_protocol_pio_in+0x96>
-40000df4: 83 7d d4 01 cmpl $0x1,-0x2c(%ebp)
-40000df8: 72 0c jb 40000e06 <ata_protocol_pio_in+0x50>
-40000dfa: 83 7d d4 02 cmpl $0x2,-0x2c(%ebp)
-40000dfe: 0f 84 c0 00 00 00 je 40000ec4 <ata_protocol_pio_in+0x10e>
-40000e04: eb e2 jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000e06: 83 ec 08 sub $0x8,%esp
-40000e09: 68 f4 01 00 00 push $0x1f4
-40000e0e: ff 75 ec pushl -0x14(%ebp)
-40000e11: e8 9c f6 ff ff call 400004b2 <ata_wait_irq>
-40000e16: 83 c4 10 add $0x10,%esp
-40000e19: 85 c0 test %eax,%eax
-40000e1b: 74 26 je 40000e43 <ata_protocol_pio_in+0x8d>
-40000e1d: 8b 45 08 mov 0x8(%ebp),%eax
-40000e20: c7 40 2c 02 00 00 00 movl $0x2,0x2c(%eax)
-40000e27: 83 ec 0c sub $0xc,%esp
-40000e2a: 68 88 97 00 40 push $0x40009788
-40000e2f: e8 05 55 00 00 call 40006339 <printf>
-40000e34: 83 c4 10 add $0x10,%esp
-40000e37: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-40000e3e: e9 29 01 00 00 jmp 40000f6c <ata_protocol_pio_in+0x1b6>
-40000e43: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp)
-40000e4a: eb 9c jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000e4c: 83 ec 08 sub $0x8,%esp
-40000e4f: 6a 07 push $0x7
-40000e51: ff 75 ec pushl -0x14(%ebp)
-40000e54: e8 aa fd ff ff call 40000c03 <ata_reg_inb>
-40000e59: 83 c4 10 add $0x10,%esp
-40000e5c: 88 45 f5 mov %al,-0xb(%ebp)
-40000e5f: 0f b6 45 f5 movzbl -0xb(%ebp),%eax
-40000e63: 25 88 00 00 00 and $0x88,%eax
-40000e68: 85 c0 test %eax,%eax
-40000e6a: 75 21 jne 40000e8d <ata_protocol_pio_in+0xd7>
-40000e6c: 0f b6 45 f5 movzbl -0xb(%ebp),%eax
-40000e70: 83 ec 08 sub $0x8,%esp
-40000e73: 50 push %eax
-40000e74: 68 a4 97 00 40 push $0x400097a4
-40000e79: e8 bb 54 00 00 call 40006339 <printf>
-40000e7e: 83 c4 10 add $0x10,%esp
-40000e81: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-40000e88: e9 df 00 00 00 jmp 40000f6c <ata_protocol_pio_in+0x1b6>
-40000e8d: 8a 45 f5 mov -0xb(%ebp),%al
-40000e90: 84 c0 test %al,%al
-40000e92: 79 12 jns 40000ea6 <ata_protocol_pio_in+0xf0>
-40000e94: 83 ec 0c sub $0xc,%esp
-40000e97: 6a 14 push $0x14
-40000e99: e8 2f 07 00 00 call 400015cd <cdi_sleep_ms>
-40000e9e: 83 c4 10 add $0x10,%esp
-40000ea1: e9 42 ff ff ff jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000ea6: 0f b6 45 f5 movzbl -0xb(%ebp),%eax
-40000eaa: 25 88 00 00 00 and $0x88,%eax
-40000eaf: 83 f8 08 cmp $0x8,%eax
-40000eb2: 0f 85 30 ff ff ff jne 40000de8 <ata_protocol_pio_in+0x32>
-40000eb8: c7 45 f0 02 00 00 00 movl $0x2,-0x10(%ebp)
-40000ebf: e9 24 ff ff ff jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000ec4: 8b 45 08 mov 0x8(%ebp),%eax
-40000ec7: 8b 48 28 mov 0x28(%eax),%ecx
-40000eca: 8b 45 08 mov 0x8(%ebp),%eax
-40000ecd: 8b 40 24 mov 0x24(%eax),%eax
-40000ed0: 0f b7 d0 movzwl %ax,%edx
-40000ed3: 8b 45 08 mov 0x8(%ebp),%eax
-40000ed6: 66 8b 40 22 mov 0x22(%eax),%ax
-40000eda: 0f b7 c0 movzwl %ax,%eax
-40000edd: 0f af c2 imul %edx,%eax
-40000ee0: 8d 04 01 lea (%ecx,%eax,1),%eax
-40000ee3: 89 45 f8 mov %eax,-0x8(%ebp)
-40000ee6: 66 c7 45 f6 00 00 movw $0x0,-0xa(%ebp)
-40000eec: eb 22 jmp 40000f10 <ata_protocol_pio_in+0x15a>
-40000eee: 0f b7 45 f6 movzwl -0xa(%ebp),%eax
-40000ef2: d1 e0 shl %eax
-40000ef4: 89 c3 mov %eax,%ebx
-40000ef6: 03 5d f8 add -0x8(%ebp),%ebx
-40000ef9: 83 ec 08 sub $0x8,%esp
-40000efc: 6a 00 push $0x0
-40000efe: ff 75 ec pushl -0x14(%ebp)
-40000f01: e8 6e 00 00 00 call 40000f74 <ata_reg_inw>
-40000f06: 83 c4 10 add $0x10,%esp
-40000f09: 66 89 03 mov %ax,(%ebx)
-40000f0c: 66 ff 45 f6 incw -0xa(%ebp)
-40000f10: 8b 45 08 mov 0x8(%ebp),%eax
-40000f13: 66 8b 40 22 mov 0x22(%eax),%ax
-40000f17: 66 d1 e8 shr %ax
-40000f1a: 66 3b 45 f6 cmp -0xa(%ebp),%ax
-40000f1e: 77 ce ja 40000eee <ata_protocol_pio_in+0x138>
-40000f20: 8b 45 08 mov 0x8(%ebp),%eax
-40000f23: 8b 40 24 mov 0x24(%eax),%eax
-40000f26: 8d 50 01 lea 0x1(%eax),%edx
-40000f29: 8b 45 08 mov 0x8(%ebp),%eax
-40000f2c: 66 89 50 24 mov %dx,0x24(%eax)
-40000f30: 8b 45 08 mov 0x8(%ebp),%eax
-40000f33: 8b 50 24 mov 0x24(%eax),%edx
-40000f36: 8b 45 08 mov 0x8(%ebp),%eax
-40000f39: 8b 40 20 mov 0x20(%eax),%eax
-40000f3c: 66 39 c2 cmp %ax,%dx
-40000f3f: 72 09 jb 40000f4a <ata_protocol_pio_in+0x194>
-40000f41: c7 45 d8 01 00 00 00 movl $0x1,-0x28(%ebp)
-40000f48: eb 22 jmp 40000f6c <ata_protocol_pio_in+0x1b6>
-40000f4a: 8b 45 08 mov 0x8(%ebp),%eax
-40000f4d: 8a 40 0c mov 0xc(%eax),%al
-40000f50: 84 c0 test %al,%al
-40000f52: 74 0c je 40000f60 <ata_protocol_pio_in+0x1aa>
-40000f54: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp)
-40000f5b: e9 88 fe ff ff jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000f60: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-40000f67: e9 7c fe ff ff jmp 40000de8 <ata_protocol_pio_in+0x32>
-40000f6c: 8b 45 d8 mov -0x28(%ebp),%eax
-40000f6f: 8b 5d fc mov -0x4(%ebp),%ebx
-40000f72: c9 leave
-40000f73: c3 ret
-
-40000f74 <ata_reg_inw>:
-40000f74: 55 push %ebp
-40000f75: 89 e5 mov %esp,%ebp
-40000f77: 83 ec 18 sub $0x18,%esp
-40000f7a: 8b 45 0c mov 0xc(%ebp),%eax
-40000f7d: 88 45 ec mov %al,-0x14(%ebp)
-40000f80: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000f84: 50 push %eax
-40000f85: ff 75 08 pushl 0x8(%ebp)
-40000f88: e8 b8 fc ff ff call 40000c45 <ata_reg_base>
-40000f8d: 83 c4 08 add $0x8,%esp
-40000f90: 66 89 45 fe mov %ax,-0x2(%ebp)
-40000f94: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40000f98: 83 e0 0f and $0xf,%eax
-40000f9b: 66 03 45 fe add -0x2(%ebp),%ax
-40000f9f: 0f b7 c0 movzwl %ax,%eax
-40000fa2: 83 ec 0c sub $0xc,%esp
-40000fa5: 50 push %eax
-40000fa6: e8 08 00 00 00 call 40000fb3 <cdi_inw>
-40000fab: 83 c4 10 add $0x10,%esp
-40000fae: 0f b7 c0 movzwl %ax,%eax
-40000fb1: c9 leave
-40000fb2: c3 ret
-
-40000fb3 <cdi_inw>:
-#define _CDI_IO_H_
-
-#include <stdint.h>
-
-static inline uint16_t cdi_inw(uint16_t _port)
-{
-40000fb3: 55 push %ebp
-40000fb4: 89 e5 mov %esp,%ebp
-40000fb6: 83 ec 14 sub $0x14,%esp
-40000fb9: 8b 45 08 mov 0x8(%ebp),%eax
-40000fbc: 66 89 45 ec mov %ax,-0x14(%ebp)
- uint16_t result;
- __asm__ ("inw %1, %0" : "=a" (result) : "Nd" (_port));
-40000fc0: 8b 55 ec mov -0x14(%ebp),%edx
-40000fc3: 66 ed in (%dx),%ax
-40000fc5: 66 89 45 fe mov %ax,-0x2(%ebp)
- return result;
-40000fc9: 0f b7 45 fe movzwl -0x2(%ebp),%eax
-}
-40000fcd: c9 leave
-40000fce: c3 ret
-
-40000fcf <ata_protocol_pio_out>:
-40000fcf: 55 push %ebp
-40000fd0: 89 e5 mov %esp,%ebp
-40000fd2: b8 00 00 00 00 mov $0x0,%eax
-40000fd7: c9 leave
-40000fd8: c3 ret
-
-40000fd9 <ata_request>:
-40000fd9: 55 push %ebp
-40000fda: 89 e5 mov %esp,%ebp
-40000fdc: 57 push %edi
-40000fdd: 56 push %esi
-40000fde: 53 push %ebx
-40000fdf: 83 ec 0c sub $0xc,%esp
-40000fe2: 8b 45 08 mov 0x8(%ebp),%eax
-40000fe5: 8b 70 04 mov 0x4(%eax),%esi
-40000fe8: 8b 45 08 mov 0x8(%ebp),%eax
-40000feb: 8b 50 18 mov 0x18(%eax),%edx
-40000fee: 8b 48 1c mov 0x1c(%eax),%ecx
-40000ff1: 8b 45 08 mov 0x8(%ebp),%eax
-40000ff4: 8a 40 14 mov 0x14(%eax),%al
-40000ff7: 0f b6 f8 movzbl %al,%edi
-40000ffa: 8b 45 08 mov 0x8(%ebp),%eax
-40000ffd: 8b 40 10 mov 0x10(%eax),%eax
-40001000: 89 45 e8 mov %eax,-0x18(%ebp)
-40001003: 8b 45 08 mov 0x8(%ebp),%eax
-40001006: 8b 00 mov (%eax),%eax
-40001008: 8a 40 18 mov 0x18(%eax),%al
-4000100b: 0f b6 d8 movzbl %al,%ebx
-4000100e: 8b 45 08 mov 0x8(%ebp),%eax
-40001011: 8b 00 mov (%eax),%eax
-40001013: 8b 40 14 mov 0x14(%eax),%eax
-40001016: 8a 40 04 mov 0x4(%eax),%al
-40001019: 0f b6 c0 movzbl %al,%eax
-4000101c: 56 push %esi
-4000101d: 51 push %ecx
-4000101e: 52 push %edx
-4000101f: 57 push %edi
-40001020: ff 75 e8 pushl -0x18(%ebp)
-40001023: 53 push %ebx
-40001024: 50 push %eax
-40001025: 68 cc 97 00 40 push $0x400097cc
-4000102a: e8 0a 53 00 00 call 40006339 <printf>
-4000102f: 83 c4 20 add $0x20,%esp
-40001032: 83 ec 0c sub $0xc,%esp
-40001035: ff 75 08 pushl 0x8(%ebp)
-40001038: e8 9f f9 ff ff call 400009dc <ata_request_command>
-4000103d: 83 c4 10 add $0x10,%esp
-40001040: 85 c0 test %eax,%eax
-40001042: 75 1c jne 40001060 <ata_request+0x87>
-40001044: 83 ec 0c sub $0xc,%esp
-40001047: 68 0c 98 00 40 push $0x4000980c
-4000104c: e8 e8 52 00 00 call 40006339 <printf>
-40001051: 83 c4 10 add $0x10,%esp
-40001054: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-4000105b: e9 81 00 00 00 jmp 400010e1 <ata_request+0x108>
-40001060: 8b 45 08 mov 0x8(%ebp),%eax
-40001063: 8b 40 04 mov 0x4(%eax),%eax
-40001066: 89 45 f0 mov %eax,-0x10(%ebp)
-40001069: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-4000106d: 74 08 je 40001077 <ata_request+0x9e>
-4000106f: 83 7d f0 01 cmpl $0x1,-0x10(%ebp)
-40001073: 74 1d je 40001092 <ata_request+0xb9>
-40001075: eb 63 jmp 400010da <ata_request+0x101>
-40001077: 83 ec 0c sub $0xc,%esp
-4000107a: ff 75 08 pushl 0x8(%ebp)
-4000107d: e8 77 fc ff ff call 40000cf9 <ata_protocol_non_data>
-40001082: 83 c4 10 add $0x10,%esp
-40001085: 85 c0 test %eax,%eax
-40001087: 75 51 jne 400010da <ata_request+0x101>
-40001089: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40001090: eb 4f jmp 400010e1 <ata_request+0x108>
-40001092: 8b 45 08 mov 0x8(%ebp),%eax
-40001095: 8b 40 08 mov 0x8(%eax),%eax
-40001098: 85 c0 test %eax,%eax
-4000109a: 75 1b jne 400010b7 <ata_request+0xde>
-4000109c: 83 ec 0c sub $0xc,%esp
-4000109f: ff 75 08 pushl 0x8(%ebp)
-400010a2: e8 0f fd ff ff call 40000db6 <ata_protocol_pio_in>
-400010a7: 83 c4 10 add $0x10,%esp
-400010aa: 85 c0 test %eax,%eax
-400010ac: 75 09 jne 400010b7 <ata_request+0xde>
-400010ae: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400010b5: eb 2a jmp 400010e1 <ata_request+0x108>
-400010b7: 8b 45 08 mov 0x8(%ebp),%eax
-400010ba: 8b 40 08 mov 0x8(%eax),%eax
-400010bd: 83 f8 01 cmp $0x1,%eax
-400010c0: 75 18 jne 400010da <ata_request+0x101>
-400010c2: ff 75 08 pushl 0x8(%ebp)
-400010c5: e8 05 ff ff ff call 40000fcf <ata_protocol_pio_out>
-400010ca: 83 c4 04 add $0x4,%esp
-400010cd: 85 c0 test %eax,%eax
-400010cf: 75 09 jne 400010da <ata_request+0x101>
-400010d1: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400010d8: eb 07 jmp 400010e1 <ata_request+0x108>
-400010da: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-400010e1: 8b 45 ec mov -0x14(%ebp),%eax
-400010e4: 8d 65 f4 lea -0xc(%ebp),%esp
-400010e7: 5b pop %ebx
-400010e8: 5e pop %esi
-400010e9: 5f pop %edi
-400010ea: c9 leave
-400010eb: c3 ret
-
-400010ec <_start>:
-400010ec: 55 push %ebp
-400010ed: 89 e5 mov %esp,%ebp
-400010ef: 53 push %ebx
-400010f0: 83 ec 24 sub $0x24,%esp
-400010f3: e8 01 70 00 00 call 400080f9 <init_memory_manager>
-400010f8: e8 27 1d 00 00 call 40002e24 <init_messaging>
-400010fd: e8 92 21 00 00 call 40003294 <init_sync_messages>
-40001102: e8 a9 0c 00 00 call 40001db0 <init_envvars>
-40001107: e8 54 52 00 00 call 40006360 <stdio_init>
-4000110c: c7 45 e0 00 01 00 00 movl $0x100,-0x20(%ebp)
-40001113: 83 ec 0c sub $0xc,%esp
-40001116: ff 75 e0 pushl -0x20(%ebp)
-40001119: e8 ba 71 00 00 call 400082d8 <malloc>
-4000111e: 83 c4 10 add $0x10,%esp
-40001121: 89 45 e4 mov %eax,-0x1c(%ebp)
-40001124: 8b 45 e4 mov -0x1c(%ebp),%eax
-40001127: 8b 15 04 a6 00 40 mov 0x4000a604,%edx
-4000112d: ff 75 e0 pushl -0x20(%ebp)
-40001130: 6a 03 push $0x3
-40001132: 50 push %eax
-40001133: 52 push %edx
-40001134: e8 1b 40 00 00 call 40005154 <setvbuf>
-40001139: 83 c4 10 add $0x10,%esp
-4000113c: e8 59 0c 00 00 call 40001d9a <get_cmdline>
-40001141: 89 45 e8 mov %eax,-0x18(%ebp)
-40001144: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-4000114b: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40001152: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-40001159: eb 28 jmp 40001183 <_start+0x97>
-4000115b: 8b 45 f0 mov -0x10(%ebp),%eax
-4000115e: 03 45 e8 add -0x18(%ebp),%eax
-40001161: 8a 00 mov (%eax),%al
-40001163: 3c 20 cmp $0x20,%al
-40001165: 75 12 jne 40001179 <_start+0x8d>
-40001167: 83 7d f4 01 cmpl $0x1,-0xc(%ebp)
-4000116b: 75 03 jne 40001170 <_start+0x84>
-4000116d: ff 45 ec incl -0x14(%ebp)
-40001170: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40001177: eb 07 jmp 40001180 <_start+0x94>
-40001179: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp)
-40001180: ff 45 f0 incl -0x10(%ebp)
-40001183: 8b 5d f0 mov -0x10(%ebp),%ebx
-40001186: 83 ec 0c sub $0xc,%esp
-40001189: ff 75 e8 pushl -0x18(%ebp)
-4000118c: e8 e3 80 00 00 call 40009274 <strlen>
-40001191: 83 c4 10 add $0x10,%esp
-40001194: 39 c3 cmp %eax,%ebx
-40001196: 72 c3 jb 4000115b <_start+0x6f>
-40001198: 83 7d f4 01 cmpl $0x1,-0xc(%ebp)
-4000119c: 75 03 jne 400011a1 <_start+0xb5>
-4000119e: ff 45 ec incl -0x14(%ebp)
-400011a1: 8b 45 ec mov -0x14(%ebp),%eax
-400011a4: c1 e0 02 shl $0x2,%eax
-400011a7: 83 c0 0f add $0xf,%eax
-400011aa: 83 c0 0f add $0xf,%eax
-400011ad: c1 e8 04 shr $0x4,%eax
-400011b0: c1 e0 04 shl $0x4,%eax
-400011b3: 29 c4 sub %eax,%esp
-400011b5: 89 65 d8 mov %esp,-0x28(%ebp)
-400011b8: 8b 45 d8 mov -0x28(%ebp),%eax
-400011bb: 83 c0 0f add $0xf,%eax
-400011be: c1 e8 04 shr $0x4,%eax
-400011c1: c1 e0 04 shl $0x4,%eax
-400011c4: 89 45 d8 mov %eax,-0x28(%ebp)
-400011c7: 8b 45 d8 mov -0x28(%ebp),%eax
-400011ca: 89 45 dc mov %eax,-0x24(%ebp)
-400011cd: 83 ec 08 sub $0x8,%esp
-400011d0: 68 34 98 00 40 push $0x40009834
-400011d5: ff 75 e8 pushl -0x18(%ebp)
-400011d8: e8 65 82 00 00 call 40009442 <strtok>
-400011dd: 83 c4 10 add $0x10,%esp
-400011e0: 89 c2 mov %eax,%edx
-400011e2: 8b 45 dc mov -0x24(%ebp),%eax
-400011e5: 89 10 mov %edx,(%eax)
-400011e7: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp)
-400011ee: eb 20 jmp 40001210 <_start+0x124>
-400011f0: 8b 5d f0 mov -0x10(%ebp),%ebx
-400011f3: 83 ec 08 sub $0x8,%esp
-400011f6: 68 34 98 00 40 push $0x40009834
-400011fb: 6a 00 push $0x0
-400011fd: e8 40 82 00 00 call 40009442 <strtok>
-40001202: 83 c4 10 add $0x10,%esp
-40001205: 89 c2 mov %eax,%edx
-40001207: 8b 45 dc mov -0x24(%ebp),%eax
-4000120a: 89 14 98 mov %edx,(%eax,%ebx,4)
-4000120d: ff 45 f0 incl -0x10(%ebp)
-40001210: 8b 45 f0 mov -0x10(%ebp),%eax
-40001213: 3b 45 ec cmp -0x14(%ebp),%eax
-40001216: 7c d8 jl 400011f0 <_start+0x104>
-40001218: 8b 45 dc mov -0x24(%ebp),%eax
-4000121b: 83 ec 08 sub $0x8,%esp
-4000121e: 50 push %eax
-4000121f: ff 75 ec pushl -0x14(%ebp)
-40001222: e8 31 f6 ff ff call 40000858 <main>
-40001227: 83 c4 10 add $0x10,%esp
-4000122a: 89 45 f8 mov %eax,-0x8(%ebp)
-4000122d: a1 04 a6 00 40 mov 0x4000a604,%eax
-40001232: 83 ec 0c sub $0xc,%esp
-40001235: 50 push %eax
-40001236: e8 63 3e 00 00 call 4000509e <fflush>
-4000123b: 83 c4 10 add $0x10,%esp
-4000123e: 83 ec 0c sub $0xc,%esp
-40001241: ff 75 e4 pushl -0x1c(%ebp)
-40001244: e8 66 77 00 00 call 400089af <free>
-40001249: 83 c4 10 add $0x10,%esp
-4000124c: 83 ec 0c sub $0xc,%esp
-4000124f: ff 75 f8 pushl -0x8(%ebp)
-40001252: e8 39 32 00 00 call 40004490 <exit>
-40001257: 83 c4 10 add $0x10,%esp
-4000125a: eb fe jmp 4000125a <_start+0x16e>
-
-4000125c <cdi_init>:
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-4000125c: 55 push %ebp
-4000125d: 89 e5 mov %esp,%ebp
-4000125f: 83 ec 08 sub $0x8,%esp
-#include <stdio.h>
-40001262: e8 b9 69 00 00 call 40007c20 <list_create>
-40001267: a3 a0 a0 00 40 mov %eax,0x4000a0a0
-#include <stdlib.h>
-4000126c: 83 ec 0c sub $0xc,%esp
-4000126f: 68 88 12 00 40 push $0x40001288
-40001274: e8 29 01 00 00 call 400013a2 <atexit>
-40001279: 83 c4 10 add $0x10,%esp
-
-#include "cdi.h"
-4000127c: e8 13 26 00 00 call 40003894 <lostio_init>
-#include "cdi/storage.h"
-40001281: e8 24 55 00 00 call 400067aa <lostio_type_directory_use>
-#include "cdi/misc.h"
-40001286: c9 leave
-40001287: c3 ret
-
-40001288 <cdi_destroy>:
-#include "cdi/io.h"
-
-#include "device.h"
-
-
-/**
-40001288: 55 push %ebp
-40001289: 89 e5 mov %esp,%ebp
-4000128b: 83 ec 18 sub $0x18,%esp
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-4000128e: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40001295: eb 14 jmp 400012ab <cdi_destroy+0x23>
-int ata_drv_identify(struct ata_device* dev)
-40001297: 8b 45 f8 mov -0x8(%ebp),%eax
-4000129a: 8b 40 14 mov 0x14(%eax),%eax
-4000129d: 83 ec 0c sub $0xc,%esp
-400012a0: ff 75 f8 pushl -0x8(%ebp)
-400012a3: ff d0 call *%eax
-400012a5: 83 c4 10 add $0x10,%esp
-
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-400012a8: ff 45 fc incl -0x4(%ebp)
-400012ab: a1 a0 a0 00 40 mov 0x4000a0a0,%eax
-400012b0: 83 ec 08 sub $0x8,%esp
-400012b3: ff 75 fc pushl -0x4(%ebp)
-400012b6: 50 push %eax
-400012b7: e8 d1 6b 00 00 call 40007e8d <list_get_element_at>
-400012bc: 83 c4 10 add $0x10,%esp
-400012bf: 89 45 f8 mov %eax,-0x8(%ebp)
-400012c2: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400012c6: 75 cf jne 40001297 <cdi_destroy+0xf>
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-400012c8: c9 leave
-400012c9: c3 ret
-
-400012ca <cdi_run_drivers>:
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-400012ca: 55 push %ebp
-400012cb: 89 e5 mov %esp,%ebp
-400012cd: 83 ec 18 sub $0x18,%esp
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-400012d0: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-400012d7: eb 48 jmp 40001321 <cdi_run_drivers+0x57>
- .block_size = ATA_SECTOR_SIZE,
-400012d9: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-400012e0: eb 1d jmp 400012ff <cdi_run_drivers+0x35>
- .buffer = buffer,
-400012e2: 8b 55 f4 mov -0xc(%ebp),%edx
-400012e5: 8b 45 f0 mov -0x10(%ebp),%eax
-400012e8: 89 42 08 mov %eax,0x8(%edx)
-
-400012eb: 8b 45 f0 mov -0x10(%ebp),%eax
-400012ee: 8b 40 0c mov 0xc(%eax),%eax
-400012f1: 83 ec 0c sub $0xc,%esp
-400012f4: ff 75 f4 pushl -0xc(%ebp)
-400012f7: ff d0 call *%eax
-400012f9: 83 c4 10 add $0x10,%esp
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-400012fc: ff 45 fc incl -0x4(%ebp)
-400012ff: 8b 55 fc mov -0x4(%ebp),%edx
-40001302: 8b 45 f0 mov -0x10(%ebp),%eax
-40001305: 8b 40 08 mov 0x8(%eax),%eax
-40001308: 83 ec 08 sub $0x8,%esp
-4000130b: 52 push %edx
-4000130c: 50 push %eax
-4000130d: e8 1a 01 00 00 call 4000142c <cdi_list_get>
-40001312: 83 c4 10 add $0x10,%esp
-40001315: 89 45 f4 mov %eax,-0xc(%ebp)
-40001318: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000131c: 75 c4 jne 400012e2 <cdi_run_drivers+0x18>
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-4000131e: ff 45 f8 incl -0x8(%ebp)
-40001321: a1 a0 a0 00 40 mov 0x4000a0a0,%eax
-40001326: 83 ec 08 sub $0x8,%esp
-40001329: ff 75 f8 pushl -0x8(%ebp)
-4000132c: 50 push %eax
-4000132d: e8 5b 6b 00 00 call 40007e8d <list_get_element_at>
-40001332: 83 c4 10 add $0x10,%esp
-40001335: 89 45 f0 mov %eax,-0x10(%ebp)
-40001338: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-4000133c: 75 9b jne 400012d9 <cdi_run_drivers+0xf>
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-4000133e: e8 39 25 00 00 call 4000387c <wait_for_rpc>
- // IDENTIFY PACKET DEVICE probieren.
-40001343: eb f9 jmp 4000133e <cdi_run_drivers+0x74>
-
-40001345 <cdi_driver_init>:
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-40001345: 55 push %ebp
-40001346: 89 e5 mov %esp,%ebp
-40001348: 83 ec 08 sub $0x8,%esp
-
-4000134b: e8 5c 00 00 00 call 400013ac <cdi_list_create>
-40001350: 89 c2 mov %eax,%edx
-40001352: 8b 45 08 mov 0x8(%ebp),%eax
-40001355: 89 50 08 mov %edx,0x8(%eax)
- return 1;
-40001358: c9 leave
-40001359: c3 ret
-
-4000135a <cdi_driver_destroy>:
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
-4000135a: 55 push %ebp
-4000135b: 89 e5 mov %esp,%ebp
-4000135d: 83 ec 08 sub $0x8,%esp
- * @param count Anzahl der Sektoren
-40001360: 8b 45 08 mov 0x8(%ebp),%eax
-40001363: 8b 40 08 mov 0x8(%eax),%eax
-40001366: 83 ec 0c sub $0xc,%esp
-40001369: 50 push %eax
-4000136a: e8 4a 00 00 00 call 400013b9 <cdi_list_destroy>
-4000136f: 83 c4 10 add $0x10,%esp
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-40001372: c9 leave
-40001373: c3 ret
-
-40001374 <cdi_driver_register>:
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
- struct ata_request request;
-40001374: 55 push %ebp
-40001375: 89 e5 mov %esp,%ebp
-40001377: 83 ec 08 sub $0x8,%esp
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-4000137a: a1 a0 a0 00 40 mov 0x4000a0a0,%eax
-4000137f: 83 ec 08 sub $0x8,%esp
-40001382: ff 75 08 pushl 0x8(%ebp)
-40001385: 50 push %eax
-40001386: e8 41 69 00 00 call 40007ccc <list_push>
-4000138b: 83 c4 10 add $0x10,%esp
- // muss unter Umstaenden mehrmals gelesen werden.
-4000138e: 8b 45 08 mov 0x8(%ebp),%eax
-40001391: 8b 40 04 mov 0x4(%eax),%eax
-40001394: 83 ec 0c sub $0xc,%esp
-40001397: 50 push %eax
-40001398: e8 df 0f 00 00 call 4000237c <init_service_register>
-4000139d: 83 c4 10 add $0x10,%esp
- uint16_t current_count;
-400013a0: c9 leave
-400013a1: c3 ret
-
-400013a2 <atexit>:
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-400013a2: 55 push %ebp
-400013a3: 89 e5 mov %esp,%ebp
- size_t count_left = count;
-400013a5: b8 ff ff ff ff mov $0xffffffff,%eax
-
-400013aa: c9 leave
-400013ab: c3 ret
-
-400013ac <cdi_list_create>:
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-400013ac: 55 push %ebp
-400013ad: 89 e5 mov %esp,%ebp
-400013af: 83 ec 08 sub $0x8,%esp
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-400013b2: e8 69 68 00 00 call 40007c20 <list_create>
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-400013b7: c9 leave
-400013b8: c3 ret
-
-400013b9 <cdi_list_destroy>:
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-400013b9: 55 push %ebp
-400013ba: 89 e5 mov %esp,%ebp
-400013bc: 83 ec 18 sub $0x18,%esp
-
-400013bf: 8b 45 08 mov 0x8(%ebp),%eax
-400013c2: 89 45 fc mov %eax,-0x4(%ebp)
-#include <stdio.h>
-400013c5: 83 ec 0c sub $0xc,%esp
-400013c8: ff 75 fc pushl -0x4(%ebp)
-400013cb: e8 7e 68 00 00 call 40007c4e <list_destroy>
-400013d0: 83 c4 10 add $0x10,%esp
-#include <stdlib.h>
-400013d3: c9 leave
-400013d4: c3 ret
-
-400013d5 <cdi_list_push>:
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-
-400013d5: 55 push %ebp
-400013d6: 89 e5 mov %esp,%ebp
-400013d8: 83 ec 18 sub $0x18,%esp
-#include "device.h"
-400013db: 8b 45 08 mov 0x8(%ebp),%eax
-400013de: 89 45 fc mov %eax,-0x4(%ebp)
-
-400013e1: 83 ec 08 sub $0x8,%esp
-400013e4: ff 75 0c pushl 0xc(%ebp)
-400013e7: ff 75 fc pushl -0x4(%ebp)
-400013ea: e8 dd 68 00 00 call 40007ccc <list_push>
-400013ef: 83 c4 10 add $0x10,%esp
-
-400013f2: c9 leave
-400013f3: c3 ret
-
-400013f4 <cdi_list_pop>:
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-400013f4: 55 push %ebp
-400013f5: 89 e5 mov %esp,%ebp
-400013f7: 83 ec 18 sub $0x18,%esp
-{
-400013fa: 8b 45 08 mov 0x8(%ebp),%eax
-400013fd: 89 45 fc mov %eax,-0x4(%ebp)
- uint8_t buffer[ATA_SECTOR_SIZE];
-40001400: 83 ec 0c sub $0xc,%esp
-40001403: ff 75 fc pushl -0x4(%ebp)
-40001406: e8 30 69 00 00 call 40007d3b <list_pop>
-4000140b: 83 c4 10 add $0x10,%esp
-
-4000140e: c9 leave
-4000140f: c3 ret
-
-40001410 <cdi_list_empty>:
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40001410: 55 push %ebp
-40001411: 89 e5 mov %esp,%ebp
-40001413: 83 ec 18 sub $0x18,%esp
-
-40001416: 8b 45 08 mov 0x8(%ebp),%eax
-40001419: 89 45 fc mov %eax,-0x4(%ebp)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-4000141c: 83 ec 0c sub $0xc,%esp
-4000141f: ff 75 fc pushl -0x4(%ebp)
-40001422: e8 4f 68 00 00 call 40007c76 <list_is_empty>
-40001427: 83 c4 10 add $0x10,%esp
- .protocol = PIO,
-4000142a: c9 leave
-4000142b: c3 ret
-
-4000142c <cdi_list_get>:
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
-4000142c: 55 push %ebp
-4000142d: 89 e5 mov %esp,%ebp
-4000142f: 83 ec 18 sub $0x18,%esp
- };
-40001432: 8b 45 08 mov 0x8(%ebp),%eax
-40001435: 89 45 fc mov %eax,-0x4(%ebp)
-
-40001438: 8b 45 0c mov 0xc(%ebp),%eax
-4000143b: 83 ec 08 sub $0x8,%esp
-4000143e: 50 push %eax
-4000143f: ff 75 fc pushl -0x4(%ebp)
-40001442: e8 46 6a 00 00 call 40007e8d <list_get_element_at>
-40001447: 83 c4 10 add $0x10,%esp
- // Request starten
-4000144a: c9 leave
-4000144b: c3 ret
-
-4000144c <cdi_list_insert>:
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-4000144c: 55 push %ebp
-4000144d: 89 e5 mov %esp,%ebp
-4000144f: 83 ec 18 sub $0x18,%esp
-
-40001452: 8b 45 08 mov 0x8(%ebp),%eax
-40001455: 89 45 fc mov %eax,-0x4(%ebp)
- // TODO: Informationen verarbeiten
-40001458: 8b 45 0c mov 0xc(%ebp),%eax
-4000145b: 83 ec 04 sub $0x4,%esp
-4000145e: ff 75 10 pushl 0x10(%ebp)
-40001461: 50 push %eax
-40001462: ff 75 fc pushl -0x4(%ebp)
-40001465: e8 57 6a 00 00 call 40007ec1 <list_insert>
-4000146a: 83 c4 10 add $0x10,%esp
-
-4000146d: c9 leave
-4000146e: c3 ret
-
-4000146f <cdi_list_remove>:
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-4000146f: 55 push %ebp
-40001470: 89 e5 mov %esp,%ebp
-40001472: 83 ec 18 sub $0x18,%esp
- * @param start LBA des Startsektors
-40001475: 8b 45 08 mov 0x8(%ebp),%eax
-40001478: 89 45 fc mov %eax,-0x4(%ebp)
- * @param count Anzahl der Sektoren
-4000147b: 8b 45 0c mov 0xc(%ebp),%eax
-4000147e: 83 ec 08 sub $0x8,%esp
-40001481: 50 push %eax
-40001482: ff 75 fc pushl -0x4(%ebp)
-40001485: e8 ef 6a 00 00 call 40007f79 <list_remove>
-4000148a: 83 c4 10 add $0x10,%esp
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-4000148d: c9 leave
-4000148e: c3 ret
-
-4000148f <cdi_list_size>:
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-4000148f: 55 push %ebp
-40001490: 89 e5 mov %esp,%ebp
-40001492: 83 ec 18 sub $0x18,%esp
- int result = 1;
-40001495: 8b 45 08 mov 0x8(%ebp),%eax
-40001498: 89 45 fc mov %eax,-0x4(%ebp)
- struct ata_request request;
-4000149b: 83 ec 0c sub $0xc,%esp
-4000149e: ff 75 fc pushl -0x4(%ebp)
-400014a1: e8 fa 67 00 00 call 40007ca0 <list_size>
-400014a6: 83 c4 10 add $0x10,%esp
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-400014a9: c9 leave
-400014aa: c3 ret
-400014ab: 90 nop
-
-400014ac <irq_handler>:
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-400014ac: 55 push %ebp
-400014ad: 89 e5 mov %esp,%ebp
-400014af: 83 ec 08 sub $0x8,%esp
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-400014b2: 8b 15 a4 a0 00 40 mov 0x4000a0a4,%edx
-400014b8: a1 a8 a0 00 40 mov 0x4000a0a8,%eax
-400014bd: 83 ec 0c sub $0xc,%esp
-400014c0: 50 push %eax
-400014c1: ff d2 call *%edx
-400014c3: 83 c4 10 add $0x10,%esp
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-400014c6: c9 leave
-400014c7: c3 ret
-
-400014c8 <cdi_register_irq>:
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-400014c8: 55 push %ebp
-400014c9: 89 e5 mov %esp,%ebp
-400014cb: 83 ec 08 sub $0x8,%esp
-400014ce: 8b 45 08 mov 0x8(%ebp),%eax
-400014d1: 88 45 fc mov %al,-0x4(%ebp)
-#include "cdi/misc.h"
-400014d4: 8b 45 0c mov 0xc(%ebp),%eax
-400014d7: a3 a4 a0 00 40 mov %eax,0x4000a0a4
-#include "cdi/io.h"
-400014dc: 8b 45 10 mov 0x10(%ebp),%eax
-400014df: a3 a8 a0 00 40 mov %eax,0x4000a0a8
-
-#include "device.h"
-400014e4: 8a 45 fc mov -0x4(%ebp),%al
-400014e7: 83 c0 20 add $0x20,%eax
-400014ea: 0f b6 c0 movzbl %al,%eax
-400014ed: 83 ec 08 sub $0x8,%esp
-400014f0: 68 ac 14 00 40 push $0x400014ac
-400014f5: 50 push %eax
-400014f6: e8 72 1a 00 00 call 40002f6d <register_intr_handler>
-400014fb: 83 c4 10 add $0x10,%esp
-
-400014fe: c9 leave
-400014ff: c3 ret
-
-40001500 <cdi_alloc_phys_mem>:
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
-40001500: 55 push %ebp
-40001501: 89 e5 mov %esp,%ebp
-40001503: 83 ec 18 sub $0x18,%esp
- .flags.direction = READ,
-40001506: 8d 45 f8 lea -0x8(%ebp),%eax
-40001509: 83 ec 04 sub $0x4,%esp
-4000150c: 68 80 00 00 00 push $0x80
-40001511: ff 75 08 pushl 0x8(%ebp)
-40001514: 50 push %eax
-40001515: e8 56 18 00 00 call 40002d70 <mem_dma_allocate>
-4000151a: 83 c4 0c add $0xc,%esp
- .flags.poll = 1,
- .flags.lba = 0,
-4000151d: 8b 45 f8 mov -0x8(%ebp),%eax
-40001520: 85 c0 test %eax,%eax
-40001522: 75 09 jne 4000152d <cdi_alloc_phys_mem+0x2d>
-
-40001524: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000152b: eb 17 jmp 40001544 <cdi_alloc_phys_mem+0x44>
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-4000152d: 8b 55 f8 mov -0x8(%ebp),%edx
-40001530: 8b 45 0c mov 0xc(%ebp),%eax
-40001533: 89 10 mov %edx,(%eax)
- .block_count = 1,
-40001535: 8b 55 fc mov -0x4(%ebp),%edx
-40001538: 8b 45 10 mov 0x10(%ebp),%eax
-4000153b: 89 10 mov %edx,(%eax)
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-4000153d: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40001544: 8b 45 ec mov -0x14(%ebp),%eax
-
-40001547: c9 leave
-40001548: c3 ret
-
-40001549 <cdi_ioports_alloc>:
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40001549: 55 push %ebp
-4000154a: 89 e5 mov %esp,%ebp
-4000154c: 83 ec 18 sub $0x18,%esp
-4000154f: 8b 45 08 mov 0x8(%ebp),%eax
-40001552: 8b 55 0c mov 0xc(%ebp),%edx
-40001555: 66 89 45 fc mov %ax,-0x4(%ebp)
-40001559: 66 89 55 f8 mov %dx,-0x8(%ebp)
- }
-4000155d: 0f b7 45 f8 movzwl -0x8(%ebp),%eax
-40001561: 0f b7 55 fc movzwl -0x4(%ebp),%edx
-40001565: 83 ec 08 sub $0x8,%esp
-40001568: 50 push %eax
-40001569: 52 push %edx
-4000156a: e8 ed 1b 00 00 call 4000315c <request_ports>
-4000156f: 83 c4 10 add $0x10,%esp
-40001572: 85 c0 test %eax,%eax
-40001574: 74 09 je 4000157f <cdi_ioports_alloc+0x36>
-40001576: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-4000157d: eb 07 jmp 40001586 <cdi_ioports_alloc+0x3d>
-4000157f: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp)
-40001586: 8b 45 f4 mov -0xc(%ebp),%eax
-
-40001589: c9 leave
-4000158a: c3 ret
-
-4000158b <cdi_ioports_free>:
-
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-
-4000158b: 55 push %ebp
-4000158c: 89 e5 mov %esp,%ebp
-4000158e: 83 ec 18 sub $0x18,%esp
-40001591: 8b 45 08 mov 0x8(%ebp),%eax
-40001594: 8b 55 0c mov 0xc(%ebp),%edx
-40001597: 66 89 45 fc mov %ax,-0x4(%ebp)
-4000159b: 66 89 55 f8 mov %dx,-0x8(%ebp)
-/**
-4000159f: 0f b7 45 f8 movzwl -0x8(%ebp),%eax
-400015a3: 0f b7 55 fc movzwl -0x4(%ebp),%edx
-400015a7: 83 ec 08 sub $0x8,%esp
-400015aa: 50 push %eax
-400015ab: 52 push %edx
-400015ac: e8 c9 1b 00 00 call 4000317a <release_ports>
-400015b1: 83 c4 10 add $0x10,%esp
-400015b4: 85 c0 test %eax,%eax
-400015b6: 74 09 je 400015c1 <cdi_ioports_free+0x36>
-400015b8: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-400015bf: eb 07 jmp 400015c8 <cdi_ioports_free+0x3d>
-400015c1: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp)
-400015c8: 8b 45 f4 mov -0xc(%ebp),%eax
- * Sektoren von einem ATA-Geraet lesen
-400015cb: c9 leave
-400015cc: c3 ret
-
-400015cd <cdi_sleep_ms>:
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-400015cd: 55 push %ebp
-400015ce: 89 e5 mov %esp,%ebp
-400015d0: 83 ec 08 sub $0x8,%esp
- */
-400015d3: 83 ec 0c sub $0xc,%esp
-400015d6: ff 75 08 pushl 0x8(%ebp)
-400015d9: e8 12 1b 00 00 call 400030f0 <msleep>
-400015de: 83 c4 10 add $0x10,%esp
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-400015e1: c9 leave
-400015e2: c3 ret
-400015e3: 90 nop
-
-400015e4 <cdi_storage_driver_init>:
-#include "cdi/io.h"
-
-#include "device.h"
-
-
-/**
-400015e4: 55 push %ebp
-400015e5: 89 e5 mov %esp,%ebp
-400015e7: 83 ec 08 sub $0x8,%esp
- * ATA-Geraet identifizieren
-400015ea: 8b 45 08 mov 0x8(%ebp),%eax
-400015ed: 83 ec 0c sub $0xc,%esp
-400015f0: 50 push %eax
-400015f1: e8 4f fd ff ff call 40001345 <cdi_driver_init>
-400015f6: 83 c4 10 add $0x10,%esp
- *
-400015f9: c9 leave
-400015fa: c3 ret
-
-400015fb <cdi_storage_driver_destroy>:
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-400015fb: 55 push %ebp
-400015fc: 89 e5 mov %esp,%ebp
-400015fe: 83 ec 08 sub $0x8,%esp
- // Request vorbereiten
-40001601: 8b 45 08 mov 0x8(%ebp),%eax
-40001604: 83 ec 0c sub $0xc,%esp
-40001607: 50 push %eax
-40001608: e8 4d fd ff ff call 4000135a <cdi_driver_destroy>
-4000160d: 83 c4 10 add $0x10,%esp
- struct ata_request request = {
-40001610: c9 leave
-40001611: c3 ret
-
-40001612 <cdi_storage_driver_register>:
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
-40001612: 55 push %ebp
-40001613: 89 e5 mov %esp,%ebp
-40001615: 83 ec 18 sub $0x18,%esp
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-40001618: 8b 45 08 mov 0x8(%ebp),%eax
-4000161b: 83 ec 0c sub $0xc,%esp
-4000161e: 50 push %eax
-4000161f: e8 50 fd ff ff call 40001374 <cdi_driver_register>
-40001624: 83 c4 10 add $0x10,%esp
- .buffer = buffer,
-
-40001627: a1 ac a0 00 40 mov 0x4000a0ac,%eax
-4000162c: 85 c0 test %eax,%eax
-4000162e: 75 0f jne 4000163f <cdi_storage_driver_register+0x2d>
- .error = 0
-40001630: e8 5c 04 00 00 call 40001a91 <lostio_mst_if_init>
- };
-40001635: c7 05 ac a0 00 40 01 movl $0x1,0x4000a0ac
-4000163c: 00 00 00
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-4000163f: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40001646: eb 11 jmp 40001659 <cdi_storage_driver_register+0x47>
- // IDENTIFY PACKET DEVICE probieren.
-40001648: 83 ec 0c sub $0xc,%esp
-4000164b: ff 75 fc pushl -0x4(%ebp)
-4000164e: e8 56 04 00 00 call 40001aa9 <lostio_mst_if_newdev>
-40001653: 83 c4 10 add $0x10,%esp
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40001656: ff 45 f8 incl -0x8(%ebp)
-40001659: 8b 55 f8 mov -0x8(%ebp),%edx
-4000165c: 8b 45 08 mov 0x8(%ebp),%eax
-4000165f: 8b 40 08 mov 0x8(%eax),%eax
-40001662: 83 ec 08 sub $0x8,%esp
-40001665: 52 push %edx
-40001666: 50 push %eax
-40001667: e8 c0 fd ff ff call 4000142c <cdi_list_get>
-4000166c: 83 c4 10 add $0x10,%esp
-4000166f: 89 45 fc mov %eax,-0x4(%ebp)
-40001672: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40001676: 75 d0 jne 40001648 <cdi_storage_driver_register+0x36>
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-40001678: c9 leave
-40001679: c3 ret
-
-4000167a <cdi_storage_read>:
-
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
-4000167a: 55 push %ebp
-4000167b: 89 e5 mov %esp,%ebp
-4000167d: 56 push %esi
-4000167e: 53 push %ebx
-4000167f: 83 ec 50 sub $0x50,%esp
-40001682: 8b 45 0c mov 0xc(%ebp),%eax
-40001685: 89 45 c0 mov %eax,-0x40(%ebp)
-40001688: 8b 45 10 mov 0x10(%ebp),%eax
-4000168b: 89 45 c4 mov %eax,-0x3c(%ebp)
- *
- * @param start LBA des Startsektors
-4000168e: 8b 45 08 mov 0x8(%ebp),%eax
-40001691: 8b 40 08 mov 0x8(%eax),%eax
-40001694: 89 45 d8 mov %eax,-0x28(%ebp)
- * @param count Anzahl der Sektoren
-40001697: 8b 45 08 mov 0x8(%ebp),%eax
-4000169a: 8b 40 0c mov 0xc(%eax),%eax
-4000169d: 89 45 dc mov %eax,-0x24(%ebp)
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-400016a0: 8b 45 dc mov -0x24(%ebp),%eax
-400016a3: ba 00 00 00 00 mov $0x0,%edx
-400016a8: 52 push %edx
-400016a9: 50 push %eax
-400016aa: ff 75 c4 pushl -0x3c(%ebp)
-400016ad: ff 75 c0 pushl -0x40(%ebp)
-400016b0: e8 a7 7d 00 00 call 4000945c <__udivdi3>
-400016b5: 83 c4 10 add $0x10,%esp
-400016b8: 89 45 e0 mov %eax,-0x20(%ebp)
-400016bb: 89 55 e4 mov %edx,-0x1c(%ebp)
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-400016be: 8b 45 14 mov 0x14(%ebp),%eax
-400016c1: ba 00 00 00 00 mov $0x0,%edx
-400016c6: 89 c1 mov %eax,%ecx
-400016c8: 89 d3 mov %edx,%ebx
-400016ca: 03 4d c0 add -0x40(%ebp),%ecx
-400016cd: 13 5d c4 adc -0x3c(%ebp),%ebx
-400016d0: 8b 45 dc mov -0x24(%ebp),%eax
-400016d3: ba 00 00 00 00 mov $0x0,%edx
-400016d8: 52 push %edx
-400016d9: 50 push %eax
-400016da: 53 push %ebx
-400016db: 51 push %ecx
-400016dc: e8 7b 7d 00 00 call 4000945c <__udivdi3>
-400016e1: 83 c4 10 add $0x10,%esp
-400016e4: 89 45 e8 mov %eax,-0x18(%ebp)
-400016e7: 89 55 ec mov %edx,-0x14(%ebp)
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-400016ea: 8b 4d e0 mov -0x20(%ebp),%ecx
-400016ed: 8b 5d e4 mov -0x1c(%ebp),%ebx
-400016f0: 8b 45 e8 mov -0x18(%ebp),%eax
-400016f3: 8b 55 ec mov -0x14(%ebp),%edx
-400016f6: 29 c8 sub %ecx,%eax
-400016f8: 19 da sbb %ebx,%edx
-400016fa: 89 45 f0 mov %eax,-0x10(%ebp)
-400016fd: 89 55 f4 mov %edx,-0xc(%ebp)
- void* buffer)
-{
- int result = 1;
-40001700: 8b 45 dc mov -0x24(%ebp),%eax
-40001703: ba 00 00 00 00 mov $0x0,%edx
-40001708: 8b 4d c0 mov -0x40(%ebp),%ecx
-4000170b: 8b 5d c4 mov -0x3c(%ebp),%ebx
-4000170e: 52 push %edx
-4000170f: 50 push %eax
-40001710: 53 push %ebx
-40001711: 51 push %ecx
-40001712: e8 6d 7e 00 00 call 40009584 <__umoddi3>
-40001717: 83 c4 10 add $0x10,%esp
-4000171a: 09 d0 or %edx,%eax
-4000171c: 85 c0 test %eax,%eax
-4000171e: 75 54 jne 40001774 <cdi_storage_read+0xfa>
-40001720: 8b 45 14 mov 0x14(%ebp),%eax
-40001723: ba 00 00 00 00 mov $0x0,%edx
-40001728: 89 c1 mov %eax,%ecx
-4000172a: 89 d3 mov %edx,%ebx
-4000172c: 03 4d c0 add -0x40(%ebp),%ecx
-4000172f: 13 5d c4 adc -0x3c(%ebp),%ebx
-40001732: 8b 45 dc mov -0x24(%ebp),%eax
-40001735: ba 00 00 00 00 mov $0x0,%edx
-4000173a: 52 push %edx
-4000173b: 50 push %eax
-4000173c: 53 push %ebx
-4000173d: 51 push %ecx
-4000173e: e8 41 7e 00 00 call 40009584 <__umoddi3>
-40001743: 83 c4 10 add $0x10,%esp
-40001746: 09 d0 or %edx,%eax
-40001748: 85 c0 test %eax,%eax
-4000174a: 75 28 jne 40001774 <cdi_storage_read+0xfa>
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-4000174c: 8b 45 d8 mov -0x28(%ebp),%eax
-4000174f: 8b 40 18 mov 0x18(%eax),%eax
-40001752: 83 ec 08 sub $0x8,%esp
-40001755: ff 75 18 pushl 0x18(%ebp)
-40001758: ff 75 f4 pushl -0xc(%ebp)
-4000175b: ff 75 f0 pushl -0x10(%ebp)
-4000175e: ff 75 e4 pushl -0x1c(%ebp)
-40001761: ff 75 e0 pushl -0x20(%ebp)
-40001764: ff 75 08 pushl 0x8(%ebp)
-40001767: ff d0 call *%eax
-40001769: 83 c4 20 add $0x20,%esp
-4000176c: 89 45 b0 mov %eax,-0x50(%ebp)
-4000176f: e9 d0 00 00 00 jmp 40001844 <cdi_storage_read+0x1ca>
-40001774: 89 e0 mov %esp,%eax
-40001776: 89 45 b8 mov %eax,-0x48(%ebp)
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-40001779: 83 45 f0 01 addl $0x1,-0x10(%ebp)
-4000177d: 83 55 f4 00 adcl $0x0,-0xc(%ebp)
-
-40001781: 8b 45 dc mov -0x24(%ebp),%eax
-40001784: ba 00 00 00 00 mov $0x0,%edx
-40001789: 8b 4d f0 mov -0x10(%ebp),%ecx
-4000178c: 0f af ca imul %edx,%ecx
-4000178f: 8b 5d f4 mov -0xc(%ebp),%ebx
-40001792: 0f af d8 imul %eax,%ebx
-40001795: 01 d9 add %ebx,%ecx
-40001797: f7 65 f0 mull -0x10(%ebp)
-4000179a: 01 d1 add %edx,%ecx
-4000179c: 89 ca mov %ecx,%edx
-4000179e: 83 c0 0f add $0xf,%eax
-400017a1: 83 c0 0f add $0xf,%eax
-400017a4: c1 e8 04 shr $0x4,%eax
-400017a7: c1 e0 04 shl $0x4,%eax
-400017aa: 29 c4 sub %eax,%esp
-400017ac: 89 65 b4 mov %esp,-0x4c(%ebp)
-400017af: 8b 45 b4 mov -0x4c(%ebp),%eax
-400017b2: 83 c0 0f add $0xf,%eax
-400017b5: c1 e8 04 shr $0x4,%eax
-400017b8: c1 e0 04 shl $0x4,%eax
-400017bb: 89 45 b4 mov %eax,-0x4c(%ebp)
-400017be: 8b 45 b4 mov -0x4c(%ebp),%eax
-400017c1: 89 45 d4 mov %eax,-0x2c(%ebp)
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
-400017c4: 8b 45 d8 mov -0x28(%ebp),%eax
-400017c7: 8b 50 18 mov 0x18(%eax),%edx
-400017ca: 8b 45 d4 mov -0x2c(%ebp),%eax
-400017cd: 83 ec 08 sub $0x8,%esp
-400017d0: 50 push %eax
-400017d1: ff 75 f4 pushl -0xc(%ebp)
-400017d4: ff 75 f0 pushl -0x10(%ebp)
-400017d7: ff 75 e4 pushl -0x1c(%ebp)
-400017da: ff 75 e0 pushl -0x20(%ebp)
-400017dd: ff 75 08 pushl 0x8(%ebp)
-400017e0: ff d2 call *%edx
-400017e2: 83 c4 20 add $0x20,%esp
-400017e5: 85 c0 test %eax,%eax
-400017e7: 74 10 je 400017f9 <cdi_storage_read+0x17f>
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-400017e9: c7 45 b0 ff ff ff ff movl $0xffffffff,-0x50(%ebp)
-400017f0: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
-400017f7: eb 39 jmp 40001832 <cdi_storage_read+0x1b8>
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
-400017f9: 8b 75 d4 mov -0x2c(%ebp),%esi
-400017fc: 8b 45 dc mov -0x24(%ebp),%eax
-400017ff: ba 00 00 00 00 mov $0x0,%edx
-40001804: 8b 4d c0 mov -0x40(%ebp),%ecx
-40001807: 8b 5d c4 mov -0x3c(%ebp),%ebx
-4000180a: 52 push %edx
-4000180b: 50 push %eax
-4000180c: 53 push %ebx
-4000180d: 51 push %ecx
-4000180e: e8 71 7d 00 00 call 40009584 <__umoddi3>
-40001813: 83 c4 10 add $0x10,%esp
-40001816: 8d 04 06 lea (%esi,%eax,1),%eax
-40001819: 83 ec 04 sub $0x4,%esp
-4000181c: ff 75 14 pushl 0x14(%ebp)
-4000181f: 50 push %eax
-40001820: ff 75 18 pushl 0x18(%ebp)
-40001823: e8 40 77 00 00 call 40008f68 <memcpy>
-40001828: 83 c4 10 add $0x10,%esp
-4000182b: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp)
-40001832: 8b 65 b8 mov -0x48(%ebp),%esp
-40001835: 83 7d bc 01 cmpl $0x1,-0x44(%ebp)
-40001839: 74 02 je 4000183d <cdi_storage_read+0x1c3>
-4000183b: eb 07 jmp 40001844 <cdi_storage_read+0x1ca>
- }
-
-4000183d: c7 45 b0 00 00 00 00 movl $0x0,-0x50(%ebp)
-40001844: 8b 45 b0 mov -0x50(%ebp),%eax
- // Request vorbereiten
-40001847: 8d 65 f8 lea -0x8(%ebp),%esp
-4000184a: 5b pop %ebx
-4000184b: 5e pop %esi
-4000184c: c9 leave
-4000184d: c3 ret
-
-4000184e <cdi_storage_write>:
- request.flags.poll = 1;
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
-4000184e: 55 push %ebp
-4000184f: 89 e5 mov %esp,%ebp
-40001851: 53 push %ebx
-40001852: 83 ec 44 sub $0x44,%esp
-40001855: 8b 45 0c mov 0xc(%ebp),%eax
-40001858: 89 45 d0 mov %eax,-0x30(%ebp)
-4000185b: 8b 45 10 mov 0x10(%ebp),%eax
-4000185e: 89 45 d4 mov %eax,-0x2c(%ebp)
-40001861: 89 e0 mov %esp,%eax
-40001863: 89 45 cc mov %eax,-0x34(%ebp)
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40001866: 8b 45 08 mov 0x8(%ebp),%eax
-40001869: 8b 40 08 mov 0x8(%eax),%eax
-4000186c: 89 45 e0 mov %eax,-0x20(%ebp)
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-4000186f: 8b 45 08 mov 0x8(%ebp),%eax
-40001872: 8b 40 0c mov 0xc(%eax),%eax
-40001875: 89 45 e4 mov %eax,-0x1c(%ebp)
- request.registers.ata.lba = lba;
-40001878: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000187b: ba 00 00 00 00 mov $0x0,%edx
-40001880: 52 push %edx
-40001881: 50 push %eax
-40001882: ff 75 d4 pushl -0x2c(%ebp)
-40001885: ff 75 d0 pushl -0x30(%ebp)
-40001888: e8 cf 7b 00 00 call 4000945c <__udivdi3>
-4000188d: 83 c4 10 add $0x10,%esp
-40001890: 89 45 e8 mov %eax,-0x18(%ebp)
-40001893: 89 55 ec mov %edx,-0x14(%ebp)
-
-40001896: 8b 45 e4 mov -0x1c(%ebp),%eax
-40001899: 83 c0 0f add $0xf,%eax
-4000189c: 83 c0 0f add $0xf,%eax
-4000189f: c1 e8 04 shr $0x4,%eax
-400018a2: c1 e0 04 shl $0x4,%eax
-400018a5: 29 c4 sub %eax,%esp
-400018a7: 89 65 c4 mov %esp,-0x3c(%ebp)
-400018aa: 8b 45 c4 mov -0x3c(%ebp),%eax
-400018ad: 83 c0 0f add $0xf,%eax
-400018b0: c1 e8 04 shr $0x4,%eax
-400018b3: c1 e0 04 shl $0x4,%eax
-400018b6: 89 45 c4 mov %eax,-0x3c(%ebp)
-400018b9: 8b 45 c4 mov -0x3c(%ebp),%eax
-400018bc: 89 45 dc mov %eax,-0x24(%ebp)
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-
- request.error = NO_ERROR;
-
-400018bf: 8b 45 e4 mov -0x1c(%ebp),%eax
-400018c2: ba 00 00 00 00 mov $0x0,%edx
-400018c7: 8b 4d d0 mov -0x30(%ebp),%ecx
-400018ca: 8b 5d d4 mov -0x2c(%ebp),%ebx
-400018cd: 52 push %edx
-400018ce: 50 push %eax
-400018cf: 53 push %ebx
-400018d0: 51 push %ecx
-400018d1: e8 ae 7c 00 00 call 40009584 <__umoddi3>
-400018d6: 83 c4 10 add $0x10,%esp
-400018d9: 89 45 f0 mov %eax,-0x10(%ebp)
- // TODO: LBA48
-400018dc: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400018e0: 0f 84 bc 00 00 00 je 400019a2 <cdi_storage_write+0x154>
- // TODO: CHS
-400018e6: 8b 45 f0 mov -0x10(%ebp),%eax
-400018e9: 8b 55 e4 mov -0x1c(%ebp),%edx
-400018ec: 89 d1 mov %edx,%ecx
-400018ee: 29 c1 sub %eax,%ecx
-400018f0: 89 c8 mov %ecx,%eax
-400018f2: 89 45 f4 mov %eax,-0xc(%ebp)
-
-400018f5: 8b 45 14 mov 0x14(%ebp),%eax
-400018f8: 89 45 bc mov %eax,-0x44(%ebp)
-400018fb: 8b 4d f4 mov -0xc(%ebp),%ecx
-400018fe: 89 4d c0 mov %ecx,-0x40(%ebp)
-40001901: 8b 45 bc mov -0x44(%ebp),%eax
-40001904: 39 45 c0 cmp %eax,-0x40(%ebp)
-40001907: 76 06 jbe 4000190f <cdi_storage_write+0xc1>
-40001909: 8b 4d bc mov -0x44(%ebp),%ecx
-4000190c: 89 4d c0 mov %ecx,-0x40(%ebp)
-4000190f: 8b 45 c0 mov -0x40(%ebp),%eax
-40001912: 89 45 f4 mov %eax,-0xc(%ebp)
- // Request ausfuehren
- if (!ata_request(&request)) {
-40001915: 8b 45 e0 mov -0x20(%ebp),%eax
-40001918: 8b 50 18 mov 0x18(%eax),%edx
-4000191b: 8b 45 dc mov -0x24(%ebp),%eax
-4000191e: 83 ec 08 sub $0x8,%esp
-40001921: 50 push %eax
-40001922: 6a 00 push $0x0
-40001924: 6a 01 push $0x1
-40001926: ff 75 ec pushl -0x14(%ebp)
-40001929: ff 75 e8 pushl -0x18(%ebp)
-4000192c: ff 75 08 pushl 0x8(%ebp)
-4000192f: ff d2 call *%edx
-40001931: 83 c4 20 add $0x20,%esp
-40001934: 85 c0 test %eax,%eax
-40001936: 74 0c je 40001944 <cdi_storage_write+0xf6>
- result = 0;
-40001938: c7 45 c8 ff ff ff ff movl $0xffffffff,-0x38(%ebp)
-4000193f: e9 42 01 00 00 jmp 40001a86 <cdi_storage_write+0x238>
- break;
- }
-40001944: 8b 55 dc mov -0x24(%ebp),%edx
-40001947: 8b 45 f0 mov -0x10(%ebp),%eax
-4000194a: 8d 04 02 lea (%edx,%eax,1),%eax
-4000194d: 83 ec 04 sub $0x4,%esp
-40001950: ff 75 f4 pushl -0xc(%ebp)
-40001953: ff 75 18 pushl 0x18(%ebp)
-40001956: 50 push %eax
-40001957: e8 0c 76 00 00 call 40008f68 <memcpy>
-4000195c: 83 c4 10 add $0x10,%esp
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-4000195f: 8b 45 e0 mov -0x20(%ebp),%eax
-40001962: 8b 50 1c mov 0x1c(%eax),%edx
-40001965: 8b 45 dc mov -0x24(%ebp),%eax
-40001968: 83 ec 08 sub $0x8,%esp
-4000196b: 50 push %eax
-4000196c: 6a 00 push $0x0
-4000196e: 6a 01 push $0x1
-40001970: ff 75 ec pushl -0x14(%ebp)
-40001973: ff 75 e8 pushl -0x18(%ebp)
-40001976: ff 75 08 pushl 0x8(%ebp)
-40001979: ff d2 call *%edx
-4000197b: 83 c4 20 add $0x20,%esp
-4000197e: 85 c0 test %eax,%eax
-40001980: 74 0c je 4000198e <cdi_storage_write+0x140>
- count_left -= current_count;
-40001982: c7 45 c8 ff ff ff ff movl $0xffffffff,-0x38(%ebp)
-40001989: e9 f8 00 00 00 jmp 40001a86 <cdi_storage_write+0x238>
- lba += current_count;
- }
-
-4000198e: 8b 45 f4 mov -0xc(%ebp),%eax
-40001991: 29 45 14 sub %eax,0x14(%ebp)
- return result;
-40001994: 8b 45 f4 mov -0xc(%ebp),%eax
-40001997: 01 45 18 add %eax,0x18(%ebp)
-}
-4000199a: 83 45 e8 01 addl $0x1,-0x18(%ebp)
-4000199e: 83 55 ec 00 adcl $0x0,-0x14(%ebp)
-
-400019a2: 8b 45 14 mov 0x14(%ebp),%eax
-400019a5: ba 00 00 00 00 mov $0x0,%edx
-400019aa: f7 75 e4 divl -0x1c(%ebp)
-400019ad: 89 45 f4 mov %eax,-0xc(%ebp)
-400019b0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400019b4: 74 56 je 40001a0c <cdi_storage_write+0x1be>
-400019b6: 8b 45 e0 mov -0x20(%ebp),%eax
-400019b9: 8b 48 1c mov 0x1c(%eax),%ecx
-400019bc: 8b 45 f4 mov -0xc(%ebp),%eax
-400019bf: ba 00 00 00 00 mov $0x0,%edx
-400019c4: 83 ec 08 sub $0x8,%esp
-400019c7: ff 75 18 pushl 0x18(%ebp)
-400019ca: 52 push %edx
-400019cb: 50 push %eax
-400019cc: ff 75 ec pushl -0x14(%ebp)
-400019cf: ff 75 e8 pushl -0x18(%ebp)
-400019d2: ff 75 08 pushl 0x8(%ebp)
-400019d5: ff d1 call *%ecx
-400019d7: 83 c4 20 add $0x20,%esp
-400019da: 85 c0 test %eax,%eax
-400019dc: 74 0c je 400019ea <cdi_storage_write+0x19c>
-400019de: c7 45 c8 ff ff ff ff movl $0xffffffff,-0x38(%ebp)
-400019e5: e9 9c 00 00 00 jmp 40001a86 <cdi_storage_write+0x238>
-400019ea: 8b 45 f4 mov -0xc(%ebp),%eax
-400019ed: 0f af 45 e4 imul -0x1c(%ebp),%eax
-400019f1: 29 45 14 sub %eax,0x14(%ebp)
-400019f4: 8b 45 f4 mov -0xc(%ebp),%eax
-400019f7: 0f af 45 e4 imul -0x1c(%ebp),%eax
-400019fb: 01 45 18 add %eax,0x18(%ebp)
-400019fe: 8b 45 e4 mov -0x1c(%ebp),%eax
-40001a01: ba 00 00 00 00 mov $0x0,%edx
-40001a06: 01 45 e8 add %eax,-0x18(%ebp)
-40001a09: 11 55 ec adc %edx,-0x14(%ebp)
-40001a0c: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
-40001a10: 74 6d je 40001a7f <cdi_storage_write+0x231>
-40001a12: 8b 45 e0 mov -0x20(%ebp),%eax
-40001a15: 8b 50 18 mov 0x18(%eax),%edx
-40001a18: 8b 45 dc mov -0x24(%ebp),%eax
-40001a1b: 83 ec 08 sub $0x8,%esp
-40001a1e: 50 push %eax
-40001a1f: 6a 00 push $0x0
-40001a21: 6a 01 push $0x1
-40001a23: ff 75 ec pushl -0x14(%ebp)
-40001a26: ff 75 e8 pushl -0x18(%ebp)
-40001a29: ff 75 08 pushl 0x8(%ebp)
-40001a2c: ff d2 call *%edx
-40001a2e: 83 c4 20 add $0x20,%esp
-40001a31: 85 c0 test %eax,%eax
-40001a33: 74 09 je 40001a3e <cdi_storage_write+0x1f0>
-40001a35: c7 45 c8 ff ff ff ff movl $0xffffffff,-0x38(%ebp)
-40001a3c: eb 48 jmp 40001a86 <cdi_storage_write+0x238>
-40001a3e: 8b 45 dc mov -0x24(%ebp),%eax
-40001a41: 83 ec 04 sub $0x4,%esp
-40001a44: ff 75 14 pushl 0x14(%ebp)
-40001a47: ff 75 18 pushl 0x18(%ebp)
-40001a4a: 50 push %eax
-40001a4b: e8 18 75 00 00 call 40008f68 <memcpy>
-40001a50: 83 c4 10 add $0x10,%esp
-40001a53: 8b 45 e0 mov -0x20(%ebp),%eax
-40001a56: 8b 50 1c mov 0x1c(%eax),%edx
-40001a59: 8b 45 dc mov -0x24(%ebp),%eax
-40001a5c: 83 ec 08 sub $0x8,%esp
-40001a5f: 50 push %eax
-40001a60: 6a 00 push $0x0
-40001a62: 6a 01 push $0x1
-40001a64: ff 75 ec pushl -0x14(%ebp)
-40001a67: ff 75 e8 pushl -0x18(%ebp)
-40001a6a: ff 75 08 pushl 0x8(%ebp)
-40001a6d: ff d2 call *%edx
-40001a6f: 83 c4 20 add $0x20,%esp
-40001a72: 85 c0 test %eax,%eax
-40001a74: 74 09 je 40001a7f <cdi_storage_write+0x231>
-40001a76: c7 45 c8 ff ff ff ff movl $0xffffffff,-0x38(%ebp)
-40001a7d: eb 07 jmp 40001a86 <cdi_storage_write+0x238>
-40001a7f: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
-40001a86: 8b 65 cc mov -0x34(%ebp),%esp
-40001a89: 8b 45 c8 mov -0x38(%ebp),%eax
-40001a8c: 8b 5d fc mov -0x4(%ebp),%ebx
-40001a8f: c9 leave
-40001a90: c3 ret
-
-40001a91 <lostio_mst_if_init>:
-40001a91: 55 push %ebp
-40001a92: 89 e5 mov %esp,%ebp
-40001a94: 83 ec 08 sub $0x8,%esp
-40001a97: 83 ec 0c sub $0xc,%esp
-40001a9a: 68 20 a0 00 40 push $0x4000a020
-40001a9f: e8 40 1f 00 00 call 400039e4 <lostio_register_typehandle>
-40001aa4: 83 c4 10 add $0x10,%esp
-40001aa7: c9 leave
-40001aa8: c3 ret
-
-40001aa9 <lostio_mst_if_newdev>:
-40001aa9: 55 push %ebp
-40001aaa: 89 e5 mov %esp,%ebp
-40001aac: 83 ec 28 sub $0x28,%esp
-40001aaf: 89 e0 mov %esp,%eax
-40001ab1: 89 45 ec mov %eax,-0x14(%ebp)
-40001ab4: 8b 45 08 mov 0x8(%ebp),%eax
-40001ab7: 8b 40 04 mov 0x4(%eax),%eax
-40001aba: 83 ec 0c sub $0xc,%esp
-40001abd: 50 push %eax
-40001abe: e8 b1 77 00 00 call 40009274 <strlen>
-40001ac3: 83 c4 10 add $0x10,%esp
-40001ac6: 83 c0 02 add $0x2,%eax
-40001ac9: 83 c0 0f add $0xf,%eax
-40001acc: 83 c0 0f add $0xf,%eax
-40001acf: c1 e8 04 shr $0x4,%eax
-40001ad2: c1 e0 04 shl $0x4,%eax
-40001ad5: 29 c4 sub %eax,%esp
-40001ad7: 89 65 e4 mov %esp,-0x1c(%ebp)
-40001ada: 8b 45 e4 mov -0x1c(%ebp),%eax
-40001add: 83 c0 0f add $0xf,%eax
-40001ae0: c1 e8 04 shr $0x4,%eax
-40001ae3: c1 e0 04 shl $0x4,%eax
-40001ae6: 89 45 e4 mov %eax,-0x1c(%ebp)
-40001ae9: 8b 45 e4 mov -0x1c(%ebp),%eax
-40001aec: 89 45 fc mov %eax,-0x4(%ebp)
-40001aef: 8b 45 08 mov 0x8(%ebp),%eax
-40001af2: 8b 50 04 mov 0x4(%eax),%edx
-40001af5: 8b 45 fc mov -0x4(%ebp),%eax
-40001af8: 40 inc %eax
-40001af9: 83 ec 08 sub $0x8,%esp
-40001afc: 52 push %edx
-40001afd: 50 push %eax
-40001afe: e8 45 77 00 00 call 40009248 <strcpy>
-40001b03: 83 c4 10 add $0x10,%esp
-40001b06: 8b 45 fc mov -0x4(%ebp),%eax
-40001b09: c6 00 2f movb $0x2f,(%eax)
-40001b0c: 8b 45 08 mov 0x8(%ebp),%eax
-40001b0f: 8b 50 0c mov 0xc(%eax),%edx
-40001b12: 8b 45 08 mov 0x8(%ebp),%eax
-40001b15: 8b 40 10 mov 0x10(%eax),%eax
-40001b18: 0f af c2 imul %edx,%eax
-40001b1b: 8b 55 fc mov -0x4(%ebp),%edx
-40001b1e: 83 ec 0c sub $0xc,%esp
-40001b21: 6a 00 push $0x0
-40001b23: ff 75 08 pushl 0x8(%ebp)
-40001b26: 50 push %eax
-40001b27: 68 ff 00 00 00 push $0xff
-40001b2c: 52 push %edx
-40001b2d: e8 90 22 00 00 call 40003dc2 <vfstree_create_node>
-40001b32: 83 c4 20 add $0x20,%esp
-40001b35: 85 c0 test %eax,%eax
-40001b37: 75 09 jne 40001b42 <lostio_mst_if_newdev+0x99>
-40001b39: c7 45 e8 ff ff ff ff movl $0xffffffff,-0x18(%ebp)
-40001b40: eb 07 jmp 40001b49 <lostio_mst_if_newdev+0xa0>
-40001b42: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40001b49: 8b 65 ec mov -0x14(%ebp),%esp
-40001b4c: 8b 45 e8 mov -0x18(%ebp),%eax
-40001b4f: c9 leave
-40001b50: c3 ret
-
-40001b51 <lostio_mst_read_handler>:
-40001b51: 55 push %ebp
-40001b52: 89 e5 mov %esp,%ebp
-40001b54: 83 ec 18 sub $0x18,%esp
-40001b57: 8b 45 0c mov 0xc(%ebp),%eax
-40001b5a: 8b 40 1c mov 0x1c(%eax),%eax
-40001b5d: 8b 40 10 mov 0x10(%eax),%eax
-40001b60: 89 45 f8 mov %eax,-0x8(%ebp)
-40001b63: 8b 45 10 mov 0x10(%ebp),%eax
-40001b66: 0f af 45 14 imul 0x14(%ebp),%eax
-40001b6a: 89 45 fc mov %eax,-0x4(%ebp)
-40001b6d: a1 b0 a0 00 40 mov 0x4000a0b0,%eax
-40001b72: 83 ec 08 sub $0x8,%esp
-40001b75: ff 75 fc pushl -0x4(%ebp)
-40001b78: 50 push %eax
-40001b79: e8 01 71 00 00 call 40008c7f <realloc>
-40001b7e: 83 c4 10 add $0x10,%esp
-40001b81: a3 b0 a0 00 40 mov %eax,0x4000a0b0
-40001b86: 8b 0d b0 a0 00 40 mov 0x4000a0b0,%ecx
-40001b8c: 8b 45 0c mov 0xc(%ebp),%eax
-40001b8f: 8b 50 14 mov 0x14(%eax),%edx
-40001b92: 8b 40 10 mov 0x10(%eax),%eax
-40001b95: 83 ec 0c sub $0xc,%esp
-40001b98: 51 push %ecx
-40001b99: ff 75 fc pushl -0x4(%ebp)
-40001b9c: 52 push %edx
-40001b9d: 50 push %eax
-40001b9e: ff 75 f8 pushl -0x8(%ebp)
-40001ba1: e8 d4 fa ff ff call 4000167a <cdi_storage_read>
-40001ba6: 83 c4 20 add $0x20,%esp
-40001ba9: 85 c0 test %eax,%eax
-40001bab: 74 10 je 40001bbd <lostio_mst_read_handler+0x6c>
-40001bad: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-40001bb4: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40001bbb: eb 0e jmp 40001bcb <lostio_mst_read_handler+0x7a>
-40001bbd: a1 b0 a0 00 40 mov 0x4000a0b0,%eax
-40001bc2: 89 45 f0 mov %eax,-0x10(%ebp)
-40001bc5: 8b 45 fc mov -0x4(%ebp),%eax
-40001bc8: 89 45 f4 mov %eax,-0xc(%ebp)
-40001bcb: 8b 45 f0 mov -0x10(%ebp),%eax
-40001bce: 8b 55 f4 mov -0xc(%ebp),%edx
-40001bd1: 8b 4d 08 mov 0x8(%ebp),%ecx
-40001bd4: 89 01 mov %eax,(%ecx)
-40001bd6: 89 51 04 mov %edx,0x4(%ecx)
-40001bd9: 8b 45 08 mov 0x8(%ebp),%eax
-40001bdc: c9 leave
-40001bdd: c2 04 00 ret $0x4
-
-40001be0 <lostio_mst_write_handler>:
-40001be0: 55 push %ebp
-40001be1: 89 e5 mov %esp,%ebp
-40001be3: 83 ec 18 sub $0x18,%esp
-40001be6: 8b 45 08 mov 0x8(%ebp),%eax
-40001be9: 8b 40 1c mov 0x1c(%eax),%eax
-40001bec: 8b 40 10 mov 0x10(%eax),%eax
-40001bef: 89 45 f4 mov %eax,-0xc(%ebp)
-40001bf2: 8b 45 0c mov 0xc(%ebp),%eax
-40001bf5: 0f af 45 10 imul 0x10(%ebp),%eax
-40001bf9: 89 45 f8 mov %eax,-0x8(%ebp)
-40001bfc: 8b 45 f8 mov -0x8(%ebp),%eax
-40001bff: 89 45 fc mov %eax,-0x4(%ebp)
-40001c02: 8b 45 08 mov 0x8(%ebp),%eax
-40001c05: 8b 50 14 mov 0x14(%eax),%edx
-40001c08: 8b 40 10 mov 0x10(%eax),%eax
-40001c0b: 83 ec 0c sub $0xc,%esp
-40001c0e: ff 75 14 pushl 0x14(%ebp)
-40001c11: ff 75 f8 pushl -0x8(%ebp)
-40001c14: 52 push %edx
-40001c15: 50 push %eax
-40001c16: ff 75 f4 pushl -0xc(%ebp)
-40001c19: e8 30 fc ff ff call 4000184e <cdi_storage_write>
-40001c1e: 83 c4 20 add $0x20,%esp
-40001c21: 85 c0 test %eax,%eax
-40001c23: 74 07 je 40001c2c <lostio_mst_write_handler+0x4c>
-40001c25: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40001c2c: 8b 45 fc mov -0x4(%ebp),%eax
-40001c2f: c9 leave
-40001c30: c3 ret
-
-40001c31 <lostio_mst_seek_handler>:
-40001c31: 55 push %ebp
-40001c32: 89 e5 mov %esp,%ebp
-40001c34: 83 ec 30 sub $0x30,%esp
-40001c37: 8b 45 08 mov 0x8(%ebp),%eax
-40001c3a: 8b 40 1c mov 0x1c(%eax),%eax
-40001c3d: 8b 40 10 mov 0x10(%eax),%eax
-40001c40: 89 45 ec mov %eax,-0x14(%ebp)
-40001c43: 8b 45 08 mov 0x8(%ebp),%eax
-40001c46: 8b 50 14 mov 0x14(%eax),%edx
-40001c49: 8b 40 10 mov 0x10(%eax),%eax
-40001c4c: 89 45 f0 mov %eax,-0x10(%ebp)
-40001c4f: 89 55 f4 mov %edx,-0xc(%ebp)
-40001c52: 8b 45 ec mov -0x14(%ebp),%eax
-40001c55: 8b 50 0c mov 0xc(%eax),%edx
-40001c58: 8b 45 ec mov -0x14(%ebp),%eax
-40001c5b: 8b 40 10 mov 0x10(%eax),%eax
-40001c5e: 0f af c2 imul %edx,%eax
-40001c61: ba 00 00 00 00 mov $0x0,%edx
-40001c66: 89 45 f8 mov %eax,-0x8(%ebp)
-40001c69: 89 55 fc mov %edx,-0x4(%ebp)
-40001c6c: 8b 45 10 mov 0x10(%ebp),%eax
-40001c6f: 89 45 d8 mov %eax,-0x28(%ebp)
-40001c72: 83 7d d8 01 cmpl $0x1,-0x28(%ebp)
-40001c76: 74 1a je 40001c92 <lostio_mst_seek_handler+0x61>
-40001c78: 83 7d d8 02 cmpl $0x2,-0x28(%ebp)
-40001c7c: 74 20 je 40001c9e <lostio_mst_seek_handler+0x6d>
-40001c7e: 83 7d d8 00 cmpl $0x0,-0x28(%ebp)
-40001c82: 74 02 je 40001c86 <lostio_mst_seek_handler+0x55>
-40001c84: eb 24 jmp 40001caa <lostio_mst_seek_handler+0x79>
-40001c86: 8b 45 0c mov 0xc(%ebp),%eax
-40001c89: 99 cltd
-40001c8a: 89 45 f0 mov %eax,-0x10(%ebp)
-40001c8d: 89 55 f4 mov %edx,-0xc(%ebp)
-40001c90: eb 18 jmp 40001caa <lostio_mst_seek_handler+0x79>
-40001c92: 8b 45 0c mov 0xc(%ebp),%eax
-40001c95: 99 cltd
-40001c96: 01 45 f0 add %eax,-0x10(%ebp)
-40001c99: 11 55 f4 adc %edx,-0xc(%ebp)
-40001c9c: eb 0c jmp 40001caa <lostio_mst_seek_handler+0x79>
-40001c9e: 8b 45 f8 mov -0x8(%ebp),%eax
-40001ca1: 8b 55 fc mov -0x4(%ebp),%edx
-40001ca4: 89 45 f0 mov %eax,-0x10(%ebp)
-40001ca7: 89 55 f4 mov %edx,-0xc(%ebp)
-40001caa: 8b 45 f0 mov -0x10(%ebp),%eax
-40001cad: 8b 55 f4 mov -0xc(%ebp),%edx
-40001cb0: 89 45 d0 mov %eax,-0x30(%ebp)
-40001cb3: 89 55 d4 mov %edx,-0x2c(%ebp)
-40001cb6: 8b 55 d4 mov -0x2c(%ebp),%edx
-40001cb9: 3b 55 fc cmp -0x4(%ebp),%edx
-40001cbc: 72 19 jb 40001cd7 <lostio_mst_seek_handler+0xa6>
-40001cbe: 8b 45 d4 mov -0x2c(%ebp),%eax
-40001cc1: 3b 45 fc cmp -0x4(%ebp),%eax
-40001cc4: 77 08 ja 40001cce <lostio_mst_seek_handler+0x9d>
-40001cc6: 8b 55 d0 mov -0x30(%ebp),%edx
-40001cc9: 3b 55 f8 cmp -0x8(%ebp),%edx
-40001ccc: 76 09 jbe 40001cd7 <lostio_mst_seek_handler+0xa6>
-40001cce: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-40001cd5: eb 54 jmp 40001d2b <lostio_mst_seek_handler+0xfa>
-40001cd7: 8b 45 f0 mov -0x10(%ebp),%eax
-40001cda: 8b 55 f4 mov -0xc(%ebp),%edx
-40001cdd: 8b 4d fc mov -0x4(%ebp),%ecx
-40001ce0: 31 d1 xor %edx,%ecx
-40001ce2: 33 45 f8 xor -0x8(%ebp),%eax
-40001ce5: 09 c8 or %ecx,%eax
-40001ce7: 85 c0 test %eax,%eax
-40001ce9: 75 16 jne 40001d01 <lostio_mst_seek_handler+0xd0>
-40001ceb: 8b 45 08 mov 0x8(%ebp),%eax
-40001cee: 8b 40 08 mov 0x8(%eax),%eax
-40001cf1: 89 c2 mov %eax,%edx
-40001cf3: 81 ca 00 00 01 00 or $0x10000,%edx
-40001cf9: 8b 45 08 mov 0x8(%ebp),%eax
-40001cfc: 89 50 08 mov %edx,0x8(%eax)
-40001cff: eb 14 jmp 40001d15 <lostio_mst_seek_handler+0xe4>
-40001d01: 8b 45 08 mov 0x8(%ebp),%eax
-40001d04: 8b 40 08 mov 0x8(%eax),%eax
-40001d07: 89 c2 mov %eax,%edx
-40001d09: 81 e2 ff ff fe ff and $0xfffeffff,%edx
-40001d0f: 8b 45 08 mov 0x8(%ebp),%eax
-40001d12: 89 50 08 mov %edx,0x8(%eax)
-40001d15: 8b 4d 08 mov 0x8(%ebp),%ecx
-40001d18: 8b 45 f0 mov -0x10(%ebp),%eax
-40001d1b: 8b 55 f4 mov -0xc(%ebp),%edx
-40001d1e: 89 41 10 mov %eax,0x10(%ecx)
-40001d21: 89 51 14 mov %edx,0x14(%ecx)
-40001d24: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
-40001d2b: 8b 45 dc mov -0x24(%ebp),%eax
-40001d2e: c9 leave
-40001d2f: c3 ret
-
-40001d30 <get_pid>:
- * Prozessnummer des aktuellen Prozesses abfragen.
- *
- * @return Prozessnummer
- */
-pid_t get_pid()
-{
-40001d30: 55 push %ebp
-40001d31: 89 e5 mov %esp,%ebp
-40001d33: 83 ec 10 sub $0x10,%esp
- pid_t pid;
- asm(
-40001d36: b8 0e 00 00 00 mov $0xe,%eax
-40001d3b: cd 30 int $0x30
-40001d3d: 89 45 fc mov %eax,-0x4(%ebp)
- "mov %1, %%eax;"
- "int $0x30;"
- : "=a" (pid) : "i" (SYSCALL_PM_GET_PID));
-
- return pid;
-40001d40: 8b 45 fc mov -0x4(%ebp),%eax
-}
-40001d43: c9 leave
-40001d44: c3 ret
-
-40001d45 <get_parent_pid>:
- * Prozessnummer des Elternprozesses beim Kernel anfragen
- *
- * @return Prozessnummer
- */
-pid_t get_parent_pid(pid_t pid)
-{
-40001d45: 55 push %ebp
-40001d46: 89 e5 mov %esp,%ebp
-40001d48: 83 ec 10 sub $0x10,%esp
- pid_t result;
- asm(
-40001d4b: 8b 45 08 mov 0x8(%ebp),%eax
-40001d4e: 50 push %eax
-40001d4f: b8 10 00 00 00 mov $0x10,%eax
-40001d54: cd 30 int $0x30
-40001d56: 83 c4 04 add $0x4,%esp
-40001d59: 89 45 fc mov %eax,-0x4(%ebp)
- "pushl %2;"
- "mov %1, %%eax;"
- "int $0x30;"
- "addl $4, %%esp;"
- : "=a" (result) : "i" (SYSCALL_PM_GET_PARENT_PID), "r" (pid));
- return result;
-40001d5c: 8b 45 fc mov -0x4(%ebp),%eax
-}
-40001d5f: c9 leave
-40001d60: c3 ret
-
-40001d61 <create_process>:
- * untergeordenet werden soll, oder 0 fuer den aktuellen Prozess.
- *
- * @return Prozessnummer
- */
-pid_t create_process(dword initial_eip, uid_t uid, const char* args, pid_t parent)
-{
-40001d61: 55 push %ebp
-40001d62: 89 e5 mov %esp,%ebp
-40001d64: 53 push %ebx
-40001d65: 83 ec 10 sub $0x10,%esp
- pid_t pid;
-
- asm(
-40001d68: 8b 5d 08 mov 0x8(%ebp),%ebx
-40001d6b: 8b 4d 0c mov 0xc(%ebp),%ecx
-40001d6e: 8b 55 10 mov 0x10(%ebp),%edx
-40001d71: 8b 45 14 mov 0x14(%ebp),%eax
-40001d74: 50 push %eax
-40001d75: 52 push %edx
-40001d76: 51 push %ecx
-40001d77: 53 push %ebx
-40001d78: b8 03 00 00 00 mov $0x3,%eax
-40001d7d: cd 30 int $0x30
-40001d7f: 83 c4 10 add $0x10,%esp
-40001d82: 89 45 f8 mov %eax,-0x8(%ebp)
- "pushl %2;"
- "mov %1, %%eax;"
- "int $0x30;"
- "add $0x10, %%esp;"
- : "=a" (pid) : "i" (SYSCALL_PM_CREATE_PROCESS), "r" (initial_eip), "r" (uid), "r" (args), "r" (parent));
- return pid;
-40001d85: 8b 45 f8 mov -0x8(%ebp),%eax
-}
-40001d88: 83 c4 10 add $0x10,%esp
-40001d8b: 5b pop %ebx
-40001d8c: c9 leave
-40001d8d: c3 ret
-
-40001d8e <destroy_process>:
-/**
- * Den aktuellen Prozess beenden. TODO: Sollte auch mit Kinderprozessen
- * moeglich sein.
- */
-void destroy_process()
-{
-40001d8e: 55 push %ebp
-40001d8f: 89 e5 mov %esp,%ebp
- asm( "mov %0, %%eax;"
-40001d91: b8 05 00 00 00 mov $0x5,%eax
-40001d96: cd 30 int $0x30
- "int $0x30;"
- : : "i" (SYSCALL_PM_EXIT_PROCESS));
-}
-40001d98: c9 leave
-40001d99: c3 ret
-
-40001d9a <get_cmdline>:
- * Prozesses.
- *
- * @return Pointer auf den Argument-String
- */
-char* get_cmdline()
-{
-40001d9a: 55 push %ebp
-40001d9b: 89 e5 mov %esp,%ebp
-40001d9d: 83 ec 10 sub $0x10,%esp
- char* result;
- asm(
-40001da0: b8 0f 00 00 00 mov $0xf,%eax
-40001da5: cd 30 int $0x30
-40001da7: 89 45 fc mov %eax,-0x4(%ebp)
- "mov %1, %%eax;"
- "int $0x30;"
- : "=a" (result) : "i" (SYSCALL_PM_GET_CMDLINE));
-
- return result;
-40001daa: 8b 45 fc mov -0x4(%ebp),%eax
-}
-40001dad: c9 leave
-40001dae: c3 ret
-40001daf: 90 nop
-
-40001db0 <init_envvars>:
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
-40001db0: 55 push %ebp
-40001db1: 89 e5 mov %esp,%ebp
-40001db3: 56 push %esi
-40001db4: 53 push %ebx
-40001db5: 83 ec 20 sub $0x20,%esp
- .dev = dev,
-40001db8: e8 63 5e 00 00 call 40007c20 <list_create>
-40001dbd: a3 58 a6 00 40 mov %eax,0x4000a658
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40001dc2: 83 ec 08 sub $0x8,%esp
-40001dc5: 68 a7 1e 00 40 push $0x40001ea7
-40001dca: 68 36 98 00 40 push $0x40009836
-40001dcf: e8 ad 10 00 00 call 40002e81 <register_message_handler>
-40001dd4: 83 c4 10 add $0x10,%esp
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-40001dd7: 83 ec 0c sub $0xc,%esp
-40001dda: 6a 00 push $0x0
-40001ddc: e8 64 ff ff ff call 40001d45 <get_parent_pid>
-40001de1: 83 c4 10 add $0x10,%esp
-40001de4: 89 45 e4 mov %eax,-0x1c(%ebp)
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-40001de7: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
-40001deb: 0f 84 af 00 00 00 je 40001ea0 <init_envvars+0xf0>
- .block_size = ATA_SECTOR_SIZE,
-40001df1: 6a 00 push $0x0
-40001df3: 6a 00 push $0x0
-40001df5: 68 36 98 00 40 push $0x40009836
-40001dfa: ff 75 e4 pushl -0x1c(%ebp)
-40001dfd: e8 2b 18 00 00 call 4000362d <rpc_get_response>
-40001e02: 83 c4 10 add $0x10,%esp
-40001e05: 89 45 e8 mov %eax,-0x18(%ebp)
- .buffer = buffer,
-40001e08: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
-40001e0c: 0f 84 8e 00 00 00 je 40001ea0 <init_envvars+0xf0>
-40001e12: 8b 45 e8 mov -0x18(%ebp),%eax
-40001e15: 8b 40 0c mov 0xc(%eax),%eax
-40001e18: 85 c0 test %eax,%eax
-40001e1a: 0f 84 80 00 00 00 je 40001ea0 <init_envvars+0xf0>
-
-40001e20: 8b 45 e8 mov -0x18(%ebp),%eax
-40001e23: 8b 40 0c mov 0xc(%eax),%eax
-40001e26: 89 45 ec mov %eax,-0x14(%ebp)
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
-40001e29: eb 5b jmp 40001e86 <init_envvars+0xd6>
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40001e2b: 8b 45 ec mov -0x14(%ebp),%eax
-40001e2e: 89 45 f0 mov %eax,-0x10(%ebp)
- }
-40001e31: 83 ec 0c sub $0xc,%esp
-40001e34: ff 75 f0 pushl -0x10(%ebp)
-40001e37: e8 38 74 00 00 call 40009274 <strlen>
-40001e3c: 83 c4 10 add $0x10,%esp
-40001e3f: 03 45 f0 add -0x10(%ebp),%eax
-40001e42: 40 inc %eax
-40001e43: 89 45 f4 mov %eax,-0xc(%ebp)
-
-40001e46: 83 ec 04 sub $0x4,%esp
-40001e49: 6a 01 push $0x1
-40001e4b: ff 75 f4 pushl -0xc(%ebp)
-40001e4e: ff 75 f0 pushl -0x10(%ebp)
-40001e51: e8 eb 01 00 00 call 40002041 <setenv>
-40001e56: 83 c4 10 add $0x10,%esp
- // Ein ATA-Geraet
- dev->atapi = 0;
-40001e59: 8b 75 ec mov -0x14(%ebp),%esi
-40001e5c: 83 c6 02 add $0x2,%esi
-40001e5f: 83 ec 0c sub $0xc,%esp
-40001e62: ff 75 f0 pushl -0x10(%ebp)
-40001e65: e8 0a 74 00 00 call 40009274 <strlen>
-40001e6a: 83 c4 10 add $0x10,%esp
-40001e6d: 89 c3 mov %eax,%ebx
-40001e6f: 83 ec 0c sub $0xc,%esp
-40001e72: ff 75 f4 pushl -0xc(%ebp)
-40001e75: e8 fa 73 00 00 call 40009274 <strlen>
-40001e7a: 83 c4 10 add $0x10,%esp
-40001e7d: 8d 04 03 lea (%ebx,%eax,1),%eax
-40001e80: 8d 04 06 lea (%esi,%eax,1),%eax
-40001e83: 89 45 ec mov %eax,-0x14(%ebp)
-
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
-40001e86: 8b 45 ec mov -0x14(%ebp),%eax
-40001e89: 89 c1 mov %eax,%ecx
-40001e8b: 8b 45 e8 mov -0x18(%ebp),%eax
-40001e8e: 8b 40 0c mov 0xc(%eax),%eax
-40001e91: 89 c2 mov %eax,%edx
-40001e93: 8b 45 e8 mov -0x18(%ebp),%eax
-40001e96: 8b 40 08 mov 0x8(%eax),%eax
-40001e99: 8d 04 02 lea (%edx,%eax,1),%eax
-40001e9c: 39 c1 cmp %eax,%ecx
-40001e9e: 72 8b jb 40001e2b <init_envvars+0x7b>
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-40001ea0: 8d 65 f8 lea -0x8(%ebp),%esp
-40001ea3: 5b pop %ebx
-40001ea4: 5e pop %esi
-40001ea5: c9 leave
-40001ea6: c3 ret
-
-40001ea7 <rpc_get_envvars>:
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-40001ea7: 55 push %ebp
-40001ea8: 89 e5 mov %esp,%ebp
-40001eaa: 83 ec 28 sub $0x28,%esp
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40001ead: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
- */
-40001eb4: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40001ebb: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-{
- int result = 1;
- struct ata_request request;
-40001ec2: e8 d1 12 00 00 call 40003198 <p>
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
-40001ec7: e9 8c 00 00 00 jmp 40001f58 <rpc_get_envvars+0xb1>
- uint64_t lba = start;
-
-40001ecc: 8b 45 fc mov -0x4(%ebp),%eax
-40001ecf: 8b 00 mov (%eax),%eax
-40001ed1: 83 ec 0c sub $0xc,%esp
-40001ed4: 50 push %eax
-40001ed5: e8 9a 73 00 00 call 40009274 <strlen>
-40001eda: 83 c4 10 add $0x10,%esp
-40001edd: 40 inc %eax
-40001ede: 89 45 f0 mov %eax,-0x10(%ebp)
- // Anzahl der Sektoren die noch uebrig sind
-40001ee1: 8b 45 fc mov -0x4(%ebp),%eax
-40001ee4: 8b 40 04 mov 0x4(%eax),%eax
-40001ee7: 83 ec 0c sub $0xc,%esp
-40001eea: 50 push %eax
-40001eeb: e8 84 73 00 00 call 40009274 <strlen>
-40001ef0: 83 c4 10 add $0x10,%esp
-40001ef3: 40 inc %eax
-40001ef4: 89 45 f4 mov %eax,-0xc(%ebp)
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40001ef7: 8b 45 f0 mov -0x10(%ebp),%eax
-40001efa: 03 45 ec add -0x14(%ebp),%eax
-40001efd: 03 45 f4 add -0xc(%ebp),%eax
-40001f00: 83 ec 08 sub $0x8,%esp
-40001f03: 50 push %eax
-40001f04: ff 75 e8 pushl -0x18(%ebp)
-40001f07: e8 73 6d 00 00 call 40008c7f <realloc>
-40001f0c: 83 c4 10 add $0x10,%esp
-40001f0f: 89 45 e8 mov %eax,-0x18(%ebp)
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
-40001f12: 8b 45 fc mov -0x4(%ebp),%eax
-40001f15: 8b 10 mov (%eax),%edx
-40001f17: 8b 45 e8 mov -0x18(%ebp),%eax
-40001f1a: 03 45 ec add -0x14(%ebp),%eax
-40001f1d: 83 ec 04 sub $0x4,%esp
-40001f20: ff 75 f0 pushl -0x10(%ebp)
-40001f23: 52 push %edx
-40001f24: 50 push %eax
-40001f25: e8 3e 70 00 00 call 40008f68 <memcpy>
-40001f2a: 83 c4 10 add $0x10,%esp
- } else {
- current_count = count_left;
-40001f2d: 8b 45 fc mov -0x4(%ebp),%eax
-40001f30: 8b 50 04 mov 0x4(%eax),%edx
-40001f33: 8b 45 e8 mov -0x18(%ebp),%eax
-40001f36: 03 45 ec add -0x14(%ebp),%eax
-40001f39: 03 45 f0 add -0x10(%ebp),%eax
-40001f3c: 83 ec 04 sub $0x4,%esp
-40001f3f: ff 75 f4 pushl -0xc(%ebp)
-40001f42: 52 push %edx
-40001f43: 50 push %eax
-40001f44: e8 1f 70 00 00 call 40008f68 <memcpy>
-40001f49: 83 c4 10 add $0x10,%esp
- }
-
- // Request vorbereiten
-40001f4c: 8b 45 f4 mov -0xc(%ebp),%eax
-40001f4f: 03 45 f0 add -0x10(%ebp),%eax
-40001f52: 01 45 ec add %eax,-0x14(%ebp)
- request.dev = dev;
-40001f55: ff 45 f8 incl -0x8(%ebp)
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
-40001f58: a1 58 a6 00 40 mov 0x4000a658,%eax
-40001f5d: 83 ec 08 sub $0x8,%esp
-40001f60: ff 75 f8 pushl -0x8(%ebp)
-40001f63: 50 push %eax
-40001f64: e8 24 5f 00 00 call 40007e8d <list_get_element_at>
-40001f69: 83 c4 10 add $0x10,%esp
-40001f6c: 89 45 fc mov %eax,-0x4(%ebp)
-40001f6f: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40001f73: 0f 85 53 ff ff ff jne 40001ecc <rpc_get_envvars+0x25>
- }
-
- // Request vorbereiten
- request.dev = dev;
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
-40001f79: e8 26 12 00 00 call 400031a4 <v>
- request.flags.direction = READ;
- // FIXME
- request.flags.poll = 1;
-40001f7e: 8b 45 e8 mov -0x18(%ebp),%eax
-40001f81: 50 push %eax
-40001f82: ff 75 ec pushl -0x14(%ebp)
-40001f85: ff 75 0c pushl 0xc(%ebp)
-40001f88: ff 75 08 pushl 0x8(%ebp)
-40001f8b: e8 bf 16 00 00 call 4000364f <rpc_send_response>
-40001f90: 83 c4 10 add $0x10,%esp
- request.flags.ata = 0;
- request.flags.lba = 1;
-
-40001f93: 83 ec 0c sub $0xc,%esp
-40001f96: ff 75 e8 pushl -0x18(%ebp)
-40001f99: e8 11 6a 00 00 call 400089af <free>
-40001f9e: 83 c4 10 add $0x10,%esp
- request.registers.ata.command = READ_SECTORS;
-40001fa1: c9 leave
-40001fa2: c3 ret
-
-40001fa3 <getenvvar>:
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-
-40001fa3: 55 push %ebp
-40001fa4: 89 e5 mov %esp,%ebp
-40001fa6: 83 ec 18 sub $0x18,%esp
- request.error = NO_ERROR;
-40001fa9: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-
- // TODO: LBA48
- // TODO: CHS
-40001fb0: e8 e3 11 00 00 call 40003198 <p>
-
-40001fb5: eb 28 jmp 40001fdf <getenvvar+0x3c>
- // Request ausfuehren
- if (!ata_request(&request)) {
-40001fb7: 8b 45 fc mov -0x4(%ebp),%eax
-40001fba: 8b 00 mov (%eax),%eax
-40001fbc: 83 ec 08 sub $0x8,%esp
-40001fbf: 50 push %eax
-40001fc0: ff 75 08 pushl 0x8(%ebp)
-40001fc3: e8 28 72 00 00 call 400091f0 <strcmp>
-40001fc8: 83 c4 10 add $0x10,%esp
-40001fcb: 85 c0 test %eax,%eax
-40001fcd: 75 0d jne 40001fdc <getenvvar+0x39>
- result = 0;
-40001fcf: e8 d0 11 00 00 call 400031a4 <v>
- break;
-40001fd4: 8b 45 fc mov -0x4(%ebp),%eax
-40001fd7: 89 45 ec mov %eax,-0x14(%ebp)
-40001fda: eb 2c jmp 40002008 <getenvvar+0x65>
- }
-
-40001fdc: ff 45 f8 incl -0x8(%ebp)
-
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-
-40001fdf: a1 58 a6 00 40 mov 0x4000a658,%eax
-40001fe4: 83 ec 08 sub $0x8,%esp
-40001fe7: ff 75 f8 pushl -0x8(%ebp)
-40001fea: 50 push %eax
-40001feb: e8 9d 5e 00 00 call 40007e8d <list_get_element_at>
-40001ff0: 83 c4 10 add $0x10,%esp
-40001ff3: 89 45 fc mov %eax,-0x4(%ebp)
-40001ff6: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40001ffa: 75 bb jne 40001fb7 <getenvvar+0x14>
- result = 0;
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-40001ffc: e8 a3 11 00 00 call 400031a4 <v>
- count_left -= current_count;
- lba += current_count;
- }
-40002001: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002008: 8b 45 ec mov -0x14(%ebp),%eax
-
-4000200b: c9 leave
-4000200c: c3 ret
-
-4000200d <getenv>:
-4000200d: 55 push %ebp
-4000200e: 89 e5 mov %esp,%ebp
-40002010: 83 ec 18 sub $0x18,%esp
-40002013: 83 ec 0c sub $0xc,%esp
-40002016: ff 75 08 pushl 0x8(%ebp)
-40002019: e8 85 ff ff ff call 40001fa3 <getenvvar>
-4000201e: 83 c4 10 add $0x10,%esp
-40002021: 89 45 fc mov %eax,-0x4(%ebp)
-40002024: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40002028: 75 09 jne 40002033 <getenv+0x26>
-4000202a: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002031: eb 09 jmp 4000203c <getenv+0x2f>
-40002033: 8b 45 fc mov -0x4(%ebp),%eax
-40002036: 8b 40 04 mov 0x4(%eax),%eax
-40002039: 89 45 ec mov %eax,-0x14(%ebp)
-4000203c: 8b 45 ec mov -0x14(%ebp),%eax
-4000203f: c9 leave
-40002040: c3 ret
-
-40002041 <setenv>:
-40002041: 55 push %ebp
-40002042: 89 e5 mov %esp,%ebp
-40002044: 83 ec 18 sub $0x18,%esp
-40002047: 83 ec 0c sub $0xc,%esp
-4000204a: ff 75 08 pushl 0x8(%ebp)
-4000204d: e8 51 ff ff ff call 40001fa3 <getenvvar>
-40002052: 83 c4 10 add $0x10,%esp
-40002055: 89 45 f8 mov %eax,-0x8(%ebp)
-40002058: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-4000205c: 0f 85 1f 01 00 00 jne 40002181 <setenv+0x140>
-40002062: 83 ec 0c sub $0xc,%esp
-40002065: 6a 08 push $0x8
-40002067: e8 6c 62 00 00 call 400082d8 <malloc>
-4000206c: 83 c4 10 add $0x10,%esp
-4000206f: 89 45 f8 mov %eax,-0x8(%ebp)
-40002072: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40002076: 75 0c jne 40002084 <setenv+0x43>
-40002078: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000207f: e9 6d 01 00 00 jmp 400021f1 <setenv+0x1b0>
-40002084: 83 ec 0c sub $0xc,%esp
-40002087: ff 75 08 pushl 0x8(%ebp)
-4000208a: e8 e5 71 00 00 call 40009274 <strlen>
-4000208f: 83 c4 10 add $0x10,%esp
-40002092: 40 inc %eax
-40002093: 83 ec 0c sub $0xc,%esp
-40002096: 50 push %eax
-40002097: e8 3c 62 00 00 call 400082d8 <malloc>
-4000209c: 83 c4 10 add $0x10,%esp
-4000209f: 89 c2 mov %eax,%edx
-400020a1: 8b 45 f8 mov -0x8(%ebp),%eax
-400020a4: 89 10 mov %edx,(%eax)
-400020a6: 83 ec 0c sub $0xc,%esp
-400020a9: ff 75 0c pushl 0xc(%ebp)
-400020ac: e8 c3 71 00 00 call 40009274 <strlen>
-400020b1: 83 c4 10 add $0x10,%esp
-400020b4: 40 inc %eax
-400020b5: 83 ec 0c sub $0xc,%esp
-400020b8: 50 push %eax
-400020b9: e8 1a 62 00 00 call 400082d8 <malloc>
-400020be: 83 c4 10 add $0x10,%esp
-400020c1: 89 c2 mov %eax,%edx
-400020c3: 8b 45 f8 mov -0x8(%ebp),%eax
-400020c6: 89 50 04 mov %edx,0x4(%eax)
-400020c9: 8b 45 f8 mov -0x8(%ebp),%eax
-400020cc: 8b 00 mov (%eax),%eax
-400020ce: 85 c0 test %eax,%eax
-400020d0: 74 0a je 400020dc <setenv+0x9b>
-400020d2: 8b 45 f8 mov -0x8(%ebp),%eax
-400020d5: 8b 40 04 mov 0x4(%eax),%eax
-400020d8: 85 c0 test %eax,%eax
-400020da: 75 3d jne 40002119 <setenv+0xd8>
-400020dc: 8b 45 f8 mov -0x8(%ebp),%eax
-400020df: 8b 00 mov (%eax),%eax
-400020e1: 83 ec 0c sub $0xc,%esp
-400020e4: 50 push %eax
-400020e5: e8 c5 68 00 00 call 400089af <free>
-400020ea: 83 c4 10 add $0x10,%esp
-400020ed: 8b 45 f8 mov -0x8(%ebp),%eax
-400020f0: 8b 40 04 mov 0x4(%eax),%eax
-400020f3: 83 ec 0c sub $0xc,%esp
-400020f6: 50 push %eax
-400020f7: e8 b3 68 00 00 call 400089af <free>
-400020fc: 83 c4 10 add $0x10,%esp
-400020ff: 83 ec 0c sub $0xc,%esp
-40002102: ff 75 f8 pushl -0x8(%ebp)
-40002105: e8 a5 68 00 00 call 400089af <free>
-4000210a: 83 c4 10 add $0x10,%esp
-4000210d: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40002114: e9 d8 00 00 00 jmp 400021f1 <setenv+0x1b0>
-40002119: 83 ec 0c sub $0xc,%esp
-4000211c: ff 75 08 pushl 0x8(%ebp)
-4000211f: e8 50 71 00 00 call 40009274 <strlen>
-40002124: 83 c4 10 add $0x10,%esp
-40002127: 8d 50 01 lea 0x1(%eax),%edx
-4000212a: 8b 45 f8 mov -0x8(%ebp),%eax
-4000212d: 8b 00 mov (%eax),%eax
-4000212f: 83 ec 04 sub $0x4,%esp
-40002132: 52 push %edx
-40002133: ff 75 08 pushl 0x8(%ebp)
-40002136: 50 push %eax
-40002137: e8 2c 6e 00 00 call 40008f68 <memcpy>
-4000213c: 83 c4 10 add $0x10,%esp
-4000213f: 83 ec 0c sub $0xc,%esp
-40002142: ff 75 0c pushl 0xc(%ebp)
-40002145: e8 2a 71 00 00 call 40009274 <strlen>
-4000214a: 83 c4 10 add $0x10,%esp
-4000214d: 8d 50 01 lea 0x1(%eax),%edx
-40002150: 8b 45 f8 mov -0x8(%ebp),%eax
-40002153: 8b 40 04 mov 0x4(%eax),%eax
-40002156: 83 ec 04 sub $0x4,%esp
-40002159: 52 push %edx
-4000215a: ff 75 0c pushl 0xc(%ebp)
-4000215d: 50 push %eax
-4000215e: e8 05 6e 00 00 call 40008f68 <memcpy>
-40002163: 83 c4 10 add $0x10,%esp
-40002166: a1 58 a6 00 40 mov 0x4000a658,%eax
-4000216b: 83 ec 08 sub $0x8,%esp
-4000216e: ff 75 f8 pushl -0x8(%ebp)
-40002171: 50 push %eax
-40002172: e8 55 5b 00 00 call 40007ccc <list_push>
-40002177: 83 c4 10 add $0x10,%esp
-4000217a: a3 58 a6 00 40 mov %eax,0x4000a658
-4000217f: eb 69 jmp 400021ea <setenv+0x1a9>
-40002181: 83 ec 0c sub $0xc,%esp
-40002184: ff 75 0c pushl 0xc(%ebp)
-40002187: e8 e8 70 00 00 call 40009274 <strlen>
-4000218c: 83 c4 10 add $0x10,%esp
-4000218f: 40 inc %eax
-40002190: 83 ec 0c sub $0xc,%esp
-40002193: 50 push %eax
-40002194: e8 3f 61 00 00 call 400082d8 <malloc>
-40002199: 83 c4 10 add $0x10,%esp
-4000219c: 89 45 fc mov %eax,-0x4(%ebp)
-4000219f: 83 ec 0c sub $0xc,%esp
-400021a2: ff 75 0c pushl 0xc(%ebp)
-400021a5: e8 ca 70 00 00 call 40009274 <strlen>
-400021aa: 83 c4 10 add $0x10,%esp
-400021ad: 40 inc %eax
-400021ae: 83 ec 04 sub $0x4,%esp
-400021b1: 50 push %eax
-400021b2: ff 75 0c pushl 0xc(%ebp)
-400021b5: ff 75 fc pushl -0x4(%ebp)
-400021b8: e8 ab 6d 00 00 call 40008f68 <memcpy>
-400021bd: 83 c4 10 add $0x10,%esp
-400021c0: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-400021c4: 75 09 jne 400021cf <setenv+0x18e>
-400021c6: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-400021cd: eb 22 jmp 400021f1 <setenv+0x1b0>
-400021cf: 8b 45 f8 mov -0x8(%ebp),%eax
-400021d2: 8b 40 04 mov 0x4(%eax),%eax
-400021d5: 83 ec 0c sub $0xc,%esp
-400021d8: 50 push %eax
-400021d9: e8 d1 67 00 00 call 400089af <free>
-400021de: 83 c4 10 add $0x10,%esp
-400021e1: 8b 55 f8 mov -0x8(%ebp),%edx
-400021e4: 8b 45 fc mov -0x4(%ebp),%eax
-400021e7: 89 42 04 mov %eax,0x4(%edx)
-400021ea: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400021f1: 8b 45 ec mov -0x14(%ebp),%eax
-400021f4: c9 leave
-400021f5: c3 ret
-
-400021f6 <unsetenv>:
-400021f6: 55 push %ebp
-400021f7: 89 e5 mov %esp,%ebp
-400021f9: 83 ec 18 sub $0x18,%esp
-400021fc: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40002203: e8 90 0f 00 00 call 40003198 <p>
-40002208: eb 62 jmp 4000226c <unsetenv+0x76>
-4000220a: 8b 45 fc mov -0x4(%ebp),%eax
-4000220d: 8b 00 mov (%eax),%eax
-4000220f: 83 ec 08 sub $0x8,%esp
-40002212: 50 push %eax
-40002213: ff 75 08 pushl 0x8(%ebp)
-40002216: e8 d5 6f 00 00 call 400091f0 <strcmp>
-4000221b: 83 c4 10 add $0x10,%esp
-4000221e: 85 c0 test %eax,%eax
-40002220: 75 47 jne 40002269 <unsetenv+0x73>
-40002222: 8b 45 fc mov -0x4(%ebp),%eax
-40002225: 8b 00 mov (%eax),%eax
-40002227: 83 ec 0c sub $0xc,%esp
-4000222a: 50 push %eax
-4000222b: e8 7f 67 00 00 call 400089af <free>
-40002230: 83 c4 10 add $0x10,%esp
-40002233: 8b 45 fc mov -0x4(%ebp),%eax
-40002236: 8b 40 04 mov 0x4(%eax),%eax
-40002239: 83 ec 0c sub $0xc,%esp
-4000223c: 50 push %eax
-4000223d: e8 6d 67 00 00 call 400089af <free>
-40002242: 83 c4 10 add $0x10,%esp
-40002245: 83 ec 0c sub $0xc,%esp
-40002248: ff 75 fc pushl -0x4(%ebp)
-4000224b: e8 5f 67 00 00 call 400089af <free>
-40002250: 83 c4 10 add $0x10,%esp
-40002253: a1 58 a6 00 40 mov 0x4000a658,%eax
-40002258: 83 ec 08 sub $0x8,%esp
-4000225b: ff 75 f8 pushl -0x8(%ebp)
-4000225e: 50 push %eax
-4000225f: e8 15 5d 00 00 call 40007f79 <list_remove>
-40002264: 83 c4 10 add $0x10,%esp
-40002267: eb 20 jmp 40002289 <unsetenv+0x93>
-40002269: ff 45 f8 incl -0x8(%ebp)
-4000226c: a1 58 a6 00 40 mov 0x4000a658,%eax
-40002271: 83 ec 08 sub $0x8,%esp
-40002274: ff 75 f8 pushl -0x8(%ebp)
-40002277: 50 push %eax
-40002278: e8 10 5c 00 00 call 40007e8d <list_get_element_at>
-4000227d: 83 c4 10 add $0x10,%esp
-40002280: 89 45 fc mov %eax,-0x4(%ebp)
-40002283: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40002287: 75 81 jne 4000220a <unsetenv+0x14>
-40002289: e8 16 0f 00 00 call 400031a4 <v>
-4000228e: c9 leave
-4000228f: c3 ret
-
-40002290 <getcwd>:
-40002290: 55 push %ebp
-40002291: 89 e5 mov %esp,%ebp
-40002293: 83 ec 18 sub $0x18,%esp
-40002296: 83 ec 0c sub $0xc,%esp
-40002299: 68 3f 98 00 40 push $0x4000983f
-4000229e: e8 6a fd ff ff call 4000200d <getenv>
-400022a3: 83 c4 10 add $0x10,%esp
-400022a6: 89 45 fc mov %eax,-0x4(%ebp)
-400022a9: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400022ad: 75 09 jne 400022b8 <getcwd+0x28>
-400022af: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400022b6: eb 7a jmp 40002332 <getcwd+0xa2>
-400022b8: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-400022bc: 75 30 jne 400022ee <getcwd+0x5e>
-400022be: 83 ec 0c sub $0xc,%esp
-400022c1: ff 75 fc pushl -0x4(%ebp)
-400022c4: e8 ab 6f 00 00 call 40009274 <strlen>
-400022c9: 83 c4 10 add $0x10,%esp
-400022cc: 40 inc %eax
-400022cd: 89 45 0c mov %eax,0xc(%ebp)
-400022d0: 83 ec 0c sub $0xc,%esp
-400022d3: ff 75 fc pushl -0x4(%ebp)
-400022d6: e8 99 6f 00 00 call 40009274 <strlen>
-400022db: 83 c4 10 add $0x10,%esp
-400022de: 40 inc %eax
-400022df: 83 ec 0c sub $0xc,%esp
-400022e2: 50 push %eax
-400022e3: e8 f0 5f 00 00 call 400082d8 <malloc>
-400022e8: 83 c4 10 add $0x10,%esp
-400022eb: 89 45 08 mov %eax,0x8(%ebp)
-400022ee: 83 ec 0c sub $0xc,%esp
-400022f1: ff 75 fc pushl -0x4(%ebp)
-400022f4: e8 7b 6f 00 00 call 40009274 <strlen>
-400022f9: 83 c4 10 add $0x10,%esp
-400022fc: 40 inc %eax
-400022fd: 3b 45 0c cmp 0xc(%ebp),%eax
-40002300: 77 29 ja 4000232b <getcwd+0x9b>
-40002302: 83 ec 0c sub $0xc,%esp
-40002305: ff 75 fc pushl -0x4(%ebp)
-40002308: e8 67 6f 00 00 call 40009274 <strlen>
-4000230d: 83 c4 10 add $0x10,%esp
-40002310: 40 inc %eax
-40002311: 83 ec 04 sub $0x4,%esp
-40002314: 50 push %eax
-40002315: ff 75 fc pushl -0x4(%ebp)
-40002318: ff 75 08 pushl 0x8(%ebp)
-4000231b: e8 48 6c 00 00 call 40008f68 <memcpy>
-40002320: 83 c4 10 add $0x10,%esp
-40002323: 8b 45 08 mov 0x8(%ebp),%eax
-40002326: 89 45 ec mov %eax,-0x14(%ebp)
-40002329: eb 07 jmp 40002332 <getcwd+0xa2>
-4000232b: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002332: 8b 45 ec mov -0x14(%ebp),%eax
-40002335: c9 leave
-40002336: c3 ret
-
-40002337 <chdir>:
-40002337: 55 push %ebp
-40002338: 89 e5 mov %esp,%ebp
-4000233a: 83 ec 18 sub $0x18,%esp
-4000233d: 83 ec 0c sub $0xc,%esp
-40002340: ff 75 08 pushl 0x8(%ebp)
-40002343: e8 0a 05 00 00 call 40002852 <io_get_absolute_path>
-40002348: 83 c4 10 add $0x10,%esp
-4000234b: 89 45 f8 mov %eax,-0x8(%ebp)
-4000234e: 83 ec 04 sub $0x4,%esp
-40002351: 6a 01 push $0x1
-40002353: ff 75 08 pushl 0x8(%ebp)
-40002356: 68 3f 98 00 40 push $0x4000983f
-4000235b: e8 e1 fc ff ff call 40002041 <setenv>
-40002360: 83 c4 10 add $0x10,%esp
-40002363: 89 45 fc mov %eax,-0x4(%ebp)
-40002366: 83 ec 0c sub $0xc,%esp
-40002369: ff 75 f8 pushl -0x8(%ebp)
-4000236c: e8 3e 66 00 00 call 400089af <free>
-40002371: 83 c4 10 add $0x10,%esp
-40002374: 8b 45 fc mov -0x4(%ebp),%eax
-40002377: c9 leave
-40002378: c3 ret
-40002379: 90 nop
-4000237a: 90 nop
-4000237b: 90 nop
-
-4000237c <init_service_register>:
-#include "cdi/io.h"
-
-#include "device.h"
-
-
-/**
-4000237c: 55 push %ebp
-4000237d: 89 e5 mov %esp,%ebp
-4000237f: 53 push %ebx
-40002380: 83 ec 14 sub $0x14,%esp
- * ATA-Geraet identifizieren
-40002383: c7 45 f4 43 98 00 40 movl $0x40009843,-0xc(%ebp)
- *
-4000238a: 83 ec 0c sub $0xc,%esp
-4000238d: ff 75 f4 pushl -0xc(%ebp)
-40002390: e8 df 6e 00 00 call 40009274 <strlen>
-40002395: 83 c4 10 add $0x10,%esp
-40002398: 89 c3 mov %eax,%ebx
-4000239a: 83 ec 0c sub $0xc,%esp
-4000239d: ff 75 08 pushl 0x8(%ebp)
-400023a0: e8 cf 6e 00 00 call 40009274 <strlen>
-400023a5: 83 c4 10 add $0x10,%esp
-400023a8: 8d 04 03 lea (%ebx,%eax,1),%eax
-400023ab: 40 inc %eax
-400023ac: 83 ec 0c sub $0xc,%esp
-400023af: 50 push %eax
-400023b0: e8 23 5f 00 00 call 400082d8 <malloc>
-400023b5: 83 c4 10 add $0x10,%esp
-400023b8: 89 45 f8 mov %eax,-0x8(%ebp)
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-400023bb: 83 ec 0c sub $0xc,%esp
-400023be: ff 75 f4 pushl -0xc(%ebp)
-400023c1: e8 ae 6e 00 00 call 40009274 <strlen>
-400023c6: 83 c4 10 add $0x10,%esp
-400023c9: 83 ec 04 sub $0x4,%esp
-400023cc: 50 push %eax
-400023cd: ff 75 f4 pushl -0xc(%ebp)
-400023d0: ff 75 f8 pushl -0x8(%ebp)
-400023d3: e8 90 6b 00 00 call 40008f68 <memcpy>
-400023d8: 83 c4 10 add $0x10,%esp
-int ata_drv_identify(struct ata_device* dev)
-400023db: 83 ec 0c sub $0xc,%esp
-400023de: ff 75 08 pushl 0x8(%ebp)
-400023e1: e8 8e 6e 00 00 call 40009274 <strlen>
-400023e6: 83 c4 10 add $0x10,%esp
-400023e9: 8d 58 01 lea 0x1(%eax),%ebx
-400023ec: 83 ec 0c sub $0xc,%esp
-400023ef: ff 75 f4 pushl -0xc(%ebp)
-400023f2: e8 7d 6e 00 00 call 40009274 <strlen>
-400023f7: 83 c4 10 add $0x10,%esp
-400023fa: 89 c2 mov %eax,%edx
-400023fc: 8b 45 f8 mov -0x8(%ebp),%eax
-400023ff: 8d 04 02 lea (%edx,%eax,1),%eax
-40002402: 83 ec 04 sub $0x4,%esp
-40002405: 53 push %ebx
-40002406: ff 75 08 pushl 0x8(%ebp)
-40002409: 50 push %eax
-4000240a: e8 59 6b 00 00 call 40008f68 <memcpy>
-4000240f: 83 c4 10 add $0x10,%esp
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-40002412: 83 ec 0c sub $0xc,%esp
-40002415: ff 75 f8 pushl -0x8(%ebp)
-40002418: e8 57 6e 00 00 call 40009274 <strlen>
-4000241d: 83 c4 10 add $0x10,%esp
-40002420: 40 inc %eax
-40002421: 83 ec 0c sub $0xc,%esp
-40002424: ff 75 f8 pushl -0x8(%ebp)
-40002427: 50 push %eax
-40002428: 6a 00 push $0x0
-4000242a: 68 00 02 00 00 push $0x200
-4000242f: 6a 01 push $0x1
-40002431: e8 fc 0d 00 00 call 40003232 <send_message>
-40002436: 83 c4 20 add $0x20,%esp
- // Request vorbereiten
-40002439: 8b 5d fc mov -0x4(%ebp),%ebx
-4000243c: c9 leave
-4000243d: c3 ret
-
-4000243e <init_service_get>:
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-4000243e: 55 push %ebp
-4000243f: 89 e5 mov %esp,%ebp
-40002441: 83 ec 08 sub $0x8,%esp
- .registers.ata.command = IDENTIFY_DEVICE,
-40002444: 83 ec 0c sub $0xc,%esp
-40002447: ff 75 08 pushl 0x8(%ebp)
-4000244a: e8 25 6e 00 00 call 40009274 <strlen>
-4000244f: 83 c4 10 add $0x10,%esp
-40002452: 40 inc %eax
-40002453: ff 75 08 pushl 0x8(%ebp)
-40002456: 50 push %eax
-40002457: 68 4c 98 00 40 push $0x4000984c
-4000245c: 6a 01 push $0x1
-4000245e: e8 5a 10 00 00 call 400034bd <rpc_get_dword>
-40002463: 83 c4 10 add $0x10,%esp
- .block_count = 1,
-40002466: c9 leave
-40002467: c3 ret
-
-40002468 <init_process_exit>:
-
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
-40002468: 55 push %ebp
-40002469: 89 e5 mov %esp,%ebp
-4000246b: 53 push %ebx
-4000246c: 83 ec 14 sub $0x14,%esp
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-4000246f: c7 45 f4 55 98 00 40 movl $0x40009855,-0xc(%ebp)
- // IDENTIFY PACKET DEVICE probieren.
-40002476: 83 ec 0c sub $0xc,%esp
-40002479: ff 75 f4 pushl -0xc(%ebp)
-4000247c: e8 f3 6d 00 00 call 40009274 <strlen>
-40002481: 83 c4 10 add $0x10,%esp
-40002484: 83 c0 05 add $0x5,%eax
-40002487: 83 ec 0c sub $0xc,%esp
-4000248a: 50 push %eax
-4000248b: e8 48 5e 00 00 call 400082d8 <malloc>
-40002490: 83 c4 10 add $0x10,%esp
-40002493: 89 45 f8 mov %eax,-0x8(%ebp)
- return atapi_drv_identify(dev);
- }
-40002496: 83 ec 0c sub $0xc,%esp
-40002499: ff 75 f4 pushl -0xc(%ebp)
-4000249c: e8 d3 6d 00 00 call 40009274 <strlen>
-400024a1: 83 c4 10 add $0x10,%esp
-400024a4: 83 ec 04 sub $0x4,%esp
-400024a7: 50 push %eax
-400024a8: ff 75 f4 pushl -0xc(%ebp)
-400024ab: ff 75 f8 pushl -0x8(%ebp)
-400024ae: e8 b5 6a 00 00 call 40008f68 <memcpy>
-400024b3: 83 c4 10 add $0x10,%esp
-
-400024b6: 83 ec 0c sub $0xc,%esp
-400024b9: ff 75 f4 pushl -0xc(%ebp)
-400024bc: e8 b3 6d 00 00 call 40009274 <strlen>
-400024c1: 83 c4 10 add $0x10,%esp
-400024c4: 89 c2 mov %eax,%edx
-400024c6: 8b 45 f8 mov -0x8(%ebp),%eax
-400024c9: 8d 04 02 lea (%edx,%eax,1),%eax
-400024cc: 89 c2 mov %eax,%edx
-400024ce: 83 ec 04 sub $0x4,%esp
-400024d1: 6a 04 push $0x4
-400024d3: 8d 45 08 lea 0x8(%ebp),%eax
-400024d6: 50 push %eax
-400024d7: 52 push %edx
-400024d8: e8 8b 6a 00 00 call 40008f68 <memcpy>
-400024dd: 83 c4 10 add $0x10,%esp
- // Ein ATA-Geraet
-400024e0: 8b 5d f8 mov -0x8(%ebp),%ebx
-400024e3: 83 c3 04 add $0x4,%ebx
-400024e6: 83 ec 0c sub $0xc,%esp
-400024e9: ff 75 f4 pushl -0xc(%ebp)
-400024ec: e8 83 6d 00 00 call 40009274 <strlen>
-400024f1: 83 c4 10 add $0x10,%esp
-400024f4: 8d 04 03 lea (%ebx,%eax,1),%eax
-400024f7: c6 00 00 movb $0x0,(%eax)
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-400024fa: 83 ec 0c sub $0xc,%esp
-400024fd: ff 75 f8 pushl -0x8(%ebp)
-40002500: e8 6f 6d 00 00 call 40009274 <strlen>
-40002505: 83 c4 10 add $0x10,%esp
-40002508: 83 ec 0c sub $0xc,%esp
-4000250b: ff 75 f8 pushl -0x8(%ebp)
-4000250e: 50 push %eax
-4000250f: 6a 00 push $0x0
-40002511: 68 00 02 00 00 push $0x200
-40002516: 6a 01 push $0x1
-40002518: e8 15 0d 00 00 call 40003232 <send_message>
-4000251d: 83 c4 20 add $0x20,%esp
-
- return 1;
-40002520: 8b 5d fc mov -0x4(%ebp),%ebx
-40002523: c9 leave
-40002524: c3 ret
-
-40002525 <init_execute>:
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
-40002525: 55 push %ebp
-40002526: 89 e5 mov %esp,%ebp
-40002528: 83 ec 08 sub $0x8,%esp
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-4000252b: 83 ec 0c sub $0xc,%esp
-4000252e: ff 75 08 pushl 0x8(%ebp)
-40002531: e8 3e 6d 00 00 call 40009274 <strlen>
-40002536: 83 c4 10 add $0x10,%esp
-40002539: 40 inc %eax
-4000253a: ff 75 08 pushl 0x8(%ebp)
-4000253d: 50 push %eax
-4000253e: 68 5e 98 00 40 push $0x4000985e
-40002543: 6a 01 push $0x1
-40002545: e8 73 0f 00 00 call 400034bd <rpc_get_dword>
-4000254a: 83 c4 10 add $0x10,%esp
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-4000254d: c9 leave
-4000254e: c3 ret
-
-4000254f <init_wait_task_exit>:
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-4000254f: 55 push %ebp
-40002550: 89 e5 mov %esp,%ebp
-40002552: 83 ec 08 sub $0x8,%esp
- // muss unter Umstaenden mehrmals gelesen werden.
-40002555: 8d 45 08 lea 0x8(%ebp),%eax
-40002558: 50 push %eax
-40002559: 6a 04 push $0x4
-4000255b: 68 67 98 00 40 push $0x40009867
-40002560: 6a 01 push $0x1
-40002562: e8 56 0f 00 00 call 400034bd <rpc_get_dword>
-40002567: 83 c4 10 add $0x10,%esp
- uint16_t current_count;
-4000256a: c9 leave
-4000256b: c3 ret
-
-4000256c <get_path_elements>:
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
-4000256c: 55 push %ebp
-4000256d: 89 e5 mov %esp,%ebp
-4000256f: 83 ec 28 sub $0x28,%esp
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-40002572: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
- while (count_left > 0) {
-40002579: 8b 45 08 mov 0x8(%ebp),%eax
-4000257c: 89 45 ec mov %eax,-0x14(%ebp)
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-4000257f: 8b 45 08 mov 0x8(%ebp),%eax
-40002582: 89 45 f0 mov %eax,-0x10(%ebp)
- if (count_left > 256) {
-40002585: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
- current_count = 256;
-4000258c: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- } else {
- current_count = count_left;
- }
-
- // Request vorbereiten
- request.dev = dev;
-40002593: 83 7d e8 01 cmpl $0x1,-0x18(%ebp)
-40002597: 75 0c jne 400025a5 <get_path_elements+0x39>
- // TODO: DMA, UltraDMA...
-40002599: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-400025a0: e9 e9 00 00 00 jmp 4000268e <get_path_elements+0x122>
- request.protocol = PIO;
- request.flags.direction = READ;
-400025a5: 8b 45 ec mov -0x14(%ebp),%eax
-400025a8: 89 c2 mov %eax,%edx
-400025aa: 8b 45 f0 mov -0x10(%ebp),%eax
-400025ad: 89 d1 mov %edx,%ecx
-400025af: 29 c1 sub %eax,%ecx
-400025b1: 89 c8 mov %ecx,%eax
-400025b3: 89 45 fc mov %eax,-0x4(%ebp)
- // FIXME
- request.flags.poll = 1;
-400025b6: 8b 45 ec mov -0x14(%ebp),%eax
-400025b9: 8a 00 mov (%eax),%al
-400025bb: 0f be c0 movsbl %al,%eax
-400025be: 89 45 dc mov %eax,-0x24(%ebp)
-400025c1: 83 7d dc 3a cmpl $0x3a,-0x24(%ebp)
-400025c5: 74 46 je 4000260d <get_path_elements+0xa1>
-400025c7: 83 7d dc 3a cmpl $0x3a,-0x24(%ebp)
-400025cb: 7f 15 jg 400025e2 <get_path_elements+0x76>
-400025cd: 83 7d dc 00 cmpl $0x0,-0x24(%ebp)
-400025d1: 0f 84 a1 00 00 00 je 40002678 <get_path_elements+0x10c>
-400025d7: 83 7d dc 2f cmpl $0x2f,-0x24(%ebp)
-400025db: 74 55 je 40002632 <get_path_elements+0xc6>
-400025dd: e9 ac 00 00 00 jmp 4000268e <get_path_elements+0x122>
-400025e2: 83 7d dc 5c cmpl $0x5c,-0x24(%ebp)
-400025e6: 74 0b je 400025f3 <get_path_elements+0x87>
-400025e8: 83 7d dc 7c cmpl $0x7c,-0x24(%ebp)
-400025ec: 74 72 je 40002660 <get_path_elements+0xf4>
-400025ee: e9 9b 00 00 00 jmp 4000268e <get_path_elements+0x122>
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-400025f3: 8b 45 ec mov -0x14(%ebp),%eax
-400025f6: 40 inc %eax
-400025f7: 8a 00 mov (%eax),%al
-400025f9: 84 c0 test %al,%al
-400025fb: 0f 84 8d 00 00 00 je 4000268e <get_path_elements+0x122>
- // 0 steht.
-40002601: c7 45 e8 01 00 00 00 movl $0x1,-0x18(%ebp)
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-40002608: e9 81 00 00 00 jmp 4000268e <get_path_elements+0x122>
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
-4000260d: 8b 45 ec mov -0x14(%ebp),%eax
-40002610: 40 inc %eax
-40002611: 8a 00 mov (%eax),%al
-40002613: 3c 2f cmp $0x2f,%al
-40002615: 75 77 jne 4000268e <get_path_elements+0x122>
- request.buffer = current_buffer;
-40002617: 6a 01 push $0x1
-40002619: ff 75 f4 pushl -0xc(%ebp)
-4000261c: ff 75 fc pushl -0x4(%ebp)
-4000261f: ff 75 f0 pushl -0x10(%ebp)
-40002622: e8 ab 00 00 00 call 400026d2 <create_path_element>
-40002627: 83 c4 10 add $0x10,%esp
-4000262a: 89 45 f8 mov %eax,-0x8(%ebp)
-
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-4000262d: ff 45 ec incl -0x14(%ebp)
-
- // Request ausfuehren
-40002630: eb 5c jmp 4000268e <get_path_elements+0x122>
- if (!ata_request(&request)) {
- result = 0;
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
-40002632: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40002636: 74 18 je 40002650 <get_path_elements+0xe4>
- current_buffer += current_count * ATA_SECTOR_SIZE;
-40002638: 6a 02 push $0x2
-4000263a: ff 75 f4 pushl -0xc(%ebp)
-4000263d: ff 75 fc pushl -0x4(%ebp)
-40002640: ff 75 f0 pushl -0x10(%ebp)
-40002643: e8 8a 00 00 00 call 400026d2 <create_path_element>
-40002648: 83 c4 10 add $0x10,%esp
-4000264b: 89 45 f8 mov %eax,-0x8(%ebp)
-4000264e: eb 3e jmp 4000268e <get_path_elements+0x122>
- count_left -= current_count;
- lba += current_count;
- }
-40002650: c7 45 f4 02 00 00 00 movl $0x2,-0xc(%ebp)
-
-40002657: 8b 45 ec mov -0x14(%ebp),%eax
-4000265a: 40 inc %eax
-4000265b: 89 45 f0 mov %eax,-0x10(%ebp)
- return result;
-}
-4000265e: eb 2e jmp 4000268e <get_path_elements+0x122>
-
-40002660: 6a 03 push $0x3
-40002662: ff 75 f4 pushl -0xc(%ebp)
-40002665: ff 75 fc pushl -0x4(%ebp)
-40002668: ff 75 f0 pushl -0x10(%ebp)
-4000266b: e8 62 00 00 00 call 400026d2 <create_path_element>
-40002670: 83 c4 10 add $0x10,%esp
-40002673: 89 45 f8 mov %eax,-0x8(%ebp)
-40002676: eb 16 jmp 4000268e <get_path_elements+0x122>
-40002678: 6a 00 push $0x0
-4000267a: ff 75 f4 pushl -0xc(%ebp)
-4000267d: ff 75 fc pushl -0x4(%ebp)
-40002680: ff 75 f0 pushl -0x10(%ebp)
-40002683: e8 4a 00 00 00 call 400026d2 <create_path_element>
-40002688: 83 c4 10 add $0x10,%esp
-4000268b: 89 45 f8 mov %eax,-0x8(%ebp)
-4000268e: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40002692: 74 2b je 400026bf <get_path_elements+0x153>
-40002694: 8b 45 f8 mov -0x8(%ebp),%eax
-40002697: 8b 40 04 mov 0x4(%eax),%eax
-4000269a: 89 45 f4 mov %eax,-0xc(%ebp)
-4000269d: 8b 45 ec mov -0x14(%ebp),%eax
-400026a0: 40 inc %eax
-400026a1: 89 45 f0 mov %eax,-0x10(%ebp)
-400026a4: 83 ec 04 sub $0x4,%esp
-400026a7: ff 75 f8 pushl -0x8(%ebp)
-400026aa: ff 75 10 pushl 0x10(%ebp)
-400026ad: ff 75 0c pushl 0xc(%ebp)
-400026b0: e8 0c 58 00 00 call 40007ec1 <list_insert>
-400026b5: 83 c4 10 add $0x10,%esp
-400026b8: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-400026bf: 8b 45 ec mov -0x14(%ebp),%eax
-400026c2: 8a 00 mov (%eax),%al
-400026c4: 84 c0 test %al,%al
-400026c6: 74 08 je 400026d0 <get_path_elements+0x164>
-400026c8: ff 45 ec incl -0x14(%ebp)
-400026cb: e9 c3 fe ff ff jmp 40002593 <get_path_elements+0x27>
-400026d0: c9 leave
-400026d1: c3 ret
-
-400026d2 <create_path_element>:
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-400026d2: 55 push %ebp
-400026d3: 89 e5 mov %esp,%ebp
-400026d5: 83 ec 18 sub $0x18,%esp
- // IDENTIFY PACKET DEVICE probieren.
-400026d8: 83 ec 0c sub $0xc,%esp
-400026db: 68 08 01 00 00 push $0x108
-400026e0: e8 f3 5b 00 00 call 400082d8 <malloc>
-400026e5: 83 c4 10 add $0x10,%esp
-400026e8: 89 45 fc mov %eax,-0x4(%ebp)
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-400026eb: 81 7d 0c ff 00 00 00 cmpl $0xff,0xc(%ebp)
-400026f2: 76 07 jbe 400026fb <create_path_element+0x29>
-
-400026f4: c7 45 0c ff 00 00 00 movl $0xff,0xc(%ebp)
- // TODO: Informationen verarbeiten
-
-400026fb: 8b 45 fc mov -0x4(%ebp),%eax
-400026fe: 83 c0 08 add $0x8,%eax
-40002701: 83 ec 04 sub $0x4,%esp
-40002704: ff 75 0c pushl 0xc(%ebp)
-40002707: ff 75 08 pushl 0x8(%ebp)
-4000270a: 50 push %eax
-4000270b: e8 58 68 00 00 call 40008f68 <memcpy>
-40002710: 83 c4 10 add $0x10,%esp
- return 1;
-40002713: 8b 55 0c mov 0xc(%ebp),%edx
-40002716: 8b 45 fc mov -0x4(%ebp),%eax
-40002719: c6 44 10 08 00 movb $0x0,0x8(%eax,%edx,1)
-}
-
-4000271e: 8b 55 fc mov -0x4(%ebp),%edx
-40002721: 8b 45 10 mov 0x10(%ebp),%eax
-40002724: 89 02 mov %eax,(%edx)
-/**
-40002726: 8b 55 fc mov -0x4(%ebp),%edx
-40002729: 8b 45 14 mov 0x14(%ebp),%eax
-4000272c: 89 42 04 mov %eax,0x4(%edx)
- * Sektoren von einem ATA-Geraet lesen
- *
-4000272f: 8b 45 fc mov -0x4(%ebp),%eax
- * @param start LBA des Startsektors
-40002732: c9 leave
-40002733: c3 ret
-
-40002734 <eliminate_dot_elements>:
-40002734: 55 push %ebp
-40002735: 89 e5 mov %esp,%ebp
-40002737: 53 push %ebx
-40002738: 83 ec 14 sub $0x14,%esp
-4000273b: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-40002742: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40002749: e9 e1 00 00 00 jmp 4000282f <eliminate_dot_elements+0xfb>
-4000274e: 8b 45 f8 mov -0x8(%ebp),%eax
-40002751: 83 c0 08 add $0x8,%eax
-40002754: 83 ec 08 sub $0x8,%esp
-40002757: 68 70 98 00 40 push $0x40009870
-4000275c: 50 push %eax
-4000275d: e8 8e 6a 00 00 call 400091f0 <strcmp>
-40002762: 83 c4 10 add $0x10,%esp
-40002765: 85 c0 test %eax,%eax
-40002767: 75 27 jne 40002790 <eliminate_dot_elements+0x5c>
-40002769: 83 ec 08 sub $0x8,%esp
-4000276c: ff 75 f0 pushl -0x10(%ebp)
-4000276f: ff 75 08 pushl 0x8(%ebp)
-40002772: e8 02 58 00 00 call 40007f79 <list_remove>
-40002777: 83 c4 10 add $0x10,%esp
-4000277a: 83 ec 0c sub $0xc,%esp
-4000277d: ff 75 f8 pushl -0x8(%ebp)
-40002780: e8 2a 62 00 00 call 400089af <free>
-40002785: 83 c4 10 add $0x10,%esp
-40002788: ff 45 f4 incl -0xc(%ebp)
-4000278b: e9 9f 00 00 00 jmp 4000282f <eliminate_dot_elements+0xfb>
-40002790: 8b 45 f8 mov -0x8(%ebp),%eax
-40002793: 83 c0 08 add $0x8,%eax
-40002796: 83 ec 08 sub $0x8,%esp
-40002799: 68 73 98 00 40 push $0x40009873
-4000279e: 50 push %eax
-4000279f: e8 4c 6a 00 00 call 400091f0 <strcmp>
-400027a4: 83 c4 10 add $0x10,%esp
-400027a7: 85 c0 test %eax,%eax
-400027a9: 74 16 je 400027c1 <eliminate_dot_elements+0x8d>
-400027ab: 8b 45 f8 mov -0x8(%ebp),%eax
-400027ae: 83 c0 08 add $0x8,%eax
-400027b1: 83 ec 0c sub $0xc,%esp
-400027b4: 50 push %eax
-400027b5: e8 ba 6a 00 00 call 40009274 <strlen>
-400027ba: 83 c4 10 add $0x10,%esp
-400027bd: 85 c0 test %eax,%eax
-400027bf: 75 21 jne 400027e2 <eliminate_dot_elements+0xae>
-400027c1: 83 ec 08 sub $0x8,%esp
-400027c4: ff 75 f0 pushl -0x10(%ebp)
-400027c7: ff 75 08 pushl 0x8(%ebp)
-400027ca: e8 aa 57 00 00 call 40007f79 <list_remove>
-400027cf: 83 c4 10 add $0x10,%esp
-400027d2: 83 ec 0c sub $0xc,%esp
-400027d5: ff 75 f8 pushl -0x8(%ebp)
-400027d8: e8 d2 61 00 00 call 400089af <free>
-400027dd: 83 c4 10 add $0x10,%esp
-400027e0: eb 4d jmp 4000282f <eliminate_dot_elements+0xfb>
-400027e2: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400027e6: 74 44 je 4000282c <eliminate_dot_elements+0xf8>
-400027e8: 8b 5d f0 mov -0x10(%ebp),%ebx
-400027eb: 83 ec 0c sub $0xc,%esp
-400027ee: ff 75 08 pushl 0x8(%ebp)
-400027f1: e8 aa 54 00 00 call 40007ca0 <list_size>
-400027f6: 83 c4 10 add $0x10,%esp
-400027f9: 48 dec %eax
-400027fa: 39 c3 cmp %eax,%ebx
-400027fc: 73 2e jae 4000282c <eliminate_dot_elements+0xf8>
-400027fe: 83 ec 08 sub $0x8,%esp
-40002801: ff 75 f0 pushl -0x10(%ebp)
-40002804: ff 75 08 pushl 0x8(%ebp)
-40002807: e8 6d 57 00 00 call 40007f79 <list_remove>
-4000280c: 83 c4 10 add $0x10,%esp
-4000280f: 8b 45 f8 mov -0x8(%ebp),%eax
-40002812: 8b 00 mov (%eax),%eax
-40002814: 83 f8 03 cmp $0x3,%eax
-40002817: 74 03 je 4000281c <eliminate_dot_elements+0xe8>
-40002819: ff 4d f4 decl -0xc(%ebp)
-4000281c: 83 ec 0c sub $0xc,%esp
-4000281f: ff 75 f8 pushl -0x8(%ebp)
-40002822: e8 88 61 00 00 call 400089af <free>
-40002827: 83 c4 10 add $0x10,%esp
-4000282a: eb 03 jmp 4000282f <eliminate_dot_elements+0xfb>
-4000282c: ff 45 f0 incl -0x10(%ebp)
-4000282f: 83 ec 08 sub $0x8,%esp
-40002832: ff 75 f0 pushl -0x10(%ebp)
-40002835: ff 75 08 pushl 0x8(%ebp)
-40002838: e8 50 56 00 00 call 40007e8d <list_get_element_at>
-4000283d: 83 c4 10 add $0x10,%esp
-40002840: 89 45 f8 mov %eax,-0x8(%ebp)
-40002843: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40002847: 0f 85 01 ff ff ff jne 4000274e <eliminate_dot_elements+0x1a>
-4000284d: 8b 5d fc mov -0x4(%ebp),%ebx
-40002850: c9 leave
-40002851: c3 ret
-
-40002852 <io_get_absolute_path>:
-40002852: 55 push %ebp
-40002853: 89 e5 mov %esp,%ebp
-40002855: 83 ec 28 sub $0x28,%esp
-40002858: e8 c3 53 00 00 call 40007c20 <list_create>
-4000285d: 89 45 f0 mov %eax,-0x10(%ebp)
-40002860: 83 ec 04 sub $0x4,%esp
-40002863: 6a 00 push $0x0
-40002865: ff 75 f0 pushl -0x10(%ebp)
-40002868: ff 75 08 pushl 0x8(%ebp)
-4000286b: e8 fc fc ff ff call 4000256c <get_path_elements>
-40002870: 83 c4 10 add $0x10,%esp
-40002873: 83 ec 0c sub $0xc,%esp
-40002876: ff 75 f0 pushl -0x10(%ebp)
-40002879: e8 22 54 00 00 call 40007ca0 <list_size>
-4000287e: 83 c4 10 add $0x10,%esp
-40002881: 48 dec %eax
-40002882: 89 45 f4 mov %eax,-0xc(%ebp)
-40002885: 83 ec 08 sub $0x8,%esp
-40002888: ff 75 f4 pushl -0xc(%ebp)
-4000288b: ff 75 f0 pushl -0x10(%ebp)
-4000288e: e8 fa 55 00 00 call 40007e8d <list_get_element_at>
-40002893: 83 c4 10 add $0x10,%esp
-40002896: 89 45 ec mov %eax,-0x14(%ebp)
-40002899: 8b 45 ec mov -0x14(%ebp),%eax
-4000289c: 8b 00 mov (%eax),%eax
-4000289e: 85 c0 test %eax,%eax
-400028a0: 75 1b jne 400028bd <io_get_absolute_path+0x6b>
-400028a2: 8b 45 ec mov -0x14(%ebp),%eax
-400028a5: 8b 40 04 mov 0x4(%eax),%eax
-400028a8: 83 f8 01 cmp $0x1,%eax
-400028ab: 74 10 je 400028bd <io_get_absolute_path+0x6b>
-400028ad: 83 ec 0c sub $0xc,%esp
-400028b0: ff 75 f0 pushl -0x10(%ebp)
-400028b3: e8 9d 00 00 00 call 40002955 <resolve_relative_path>
-400028b8: 83 c4 10 add $0x10,%esp
-400028bb: eb 18 jmp 400028d5 <io_get_absolute_path+0x83>
-400028bd: 8b 45 ec mov -0x14(%ebp),%eax
-400028c0: 8b 00 mov (%eax),%eax
-400028c2: 83 f8 02 cmp $0x2,%eax
-400028c5: 75 0e jne 400028d5 <io_get_absolute_path+0x83>
-400028c7: 83 ec 0c sub $0xc,%esp
-400028ca: ff 75 f0 pushl -0x10(%ebp)
-400028cd: e8 ee 00 00 00 call 400029c0 <resolve_relative_serv_path>
-400028d2: 83 c4 10 add $0x10,%esp
-400028d5: 83 ec 0c sub $0xc,%esp
-400028d8: ff 75 f0 pushl -0x10(%ebp)
-400028db: e8 54 fe ff ff call 40002734 <eliminate_dot_elements>
-400028e0: 83 c4 10 add $0x10,%esp
-400028e3: 83 ec 08 sub $0x8,%esp
-400028e6: 6a 00 push $0x0
-400028e8: ff 75 f0 pushl -0x10(%ebp)
-400028eb: e8 9d 55 00 00 call 40007e8d <list_get_element_at>
-400028f0: 83 c4 10 add $0x10,%esp
-400028f3: 89 45 ec mov %eax,-0x14(%ebp)
-400028f6: 8b 45 ec mov -0x14(%ebp),%eax
-400028f9: 8b 40 04 mov 0x4(%eax),%eax
-400028fc: 83 f8 02 cmp $0x2,%eax
-400028ff: 75 0a jne 4000290b <io_get_absolute_path+0xb9>
-40002901: 8b 45 ec mov -0x14(%ebp),%eax
-40002904: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
-4000290b: 83 ec 0c sub $0xc,%esp
-4000290e: ff 75 f0 pushl -0x10(%ebp)
-40002911: e8 94 01 00 00 call 40002aaa <calc_path_length>
-40002916: 83 c4 10 add $0x10,%esp
-40002919: 89 45 f8 mov %eax,-0x8(%ebp)
-4000291c: 8b 45 f8 mov -0x8(%ebp),%eax
-4000291f: 40 inc %eax
-40002920: 83 ec 0c sub $0xc,%esp
-40002923: 50 push %eax
-40002924: e8 af 59 00 00 call 400082d8 <malloc>
-40002929: 83 c4 10 add $0x10,%esp
-4000292c: 89 45 fc mov %eax,-0x4(%ebp)
-4000292f: 83 ec 04 sub $0x4,%esp
-40002932: 6a 01 push $0x1
-40002934: ff 75 fc pushl -0x4(%ebp)
-40002937: ff 75 f0 pushl -0x10(%ebp)
-4000293a: e8 ee 01 00 00 call 40002b2d <create_path_string>
-4000293f: 83 c4 10 add $0x10,%esp
-40002942: 83 ec 0c sub $0xc,%esp
-40002945: ff 75 f0 pushl -0x10(%ebp)
-40002948: e8 01 53 00 00 call 40007c4e <list_destroy>
-4000294d: 83 c4 10 add $0x10,%esp
-40002950: 8b 45 fc mov -0x4(%ebp),%eax
-40002953: c9 leave
-40002954: c3 ret
-
-40002955 <resolve_relative_path>:
-40002955: 55 push %ebp
-40002956: 89 e5 mov %esp,%ebp
-40002958: 83 ec 18 sub $0x18,%esp
-4000295b: 83 ec 08 sub $0x8,%esp
-4000295e: 6a 00 push $0x0
-40002960: 6a 00 push $0x0
-40002962: e8 29 f9 ff ff call 40002290 <getcwd>
-40002967: 83 c4 10 add $0x10,%esp
-4000296a: 89 45 f4 mov %eax,-0xc(%ebp)
-4000296d: 83 ec 0c sub $0xc,%esp
-40002970: ff 75 08 pushl 0x8(%ebp)
-40002973: e8 28 53 00 00 call 40007ca0 <list_size>
-40002978: 83 c4 10 add $0x10,%esp
-4000297b: 89 45 fc mov %eax,-0x4(%ebp)
-4000297e: 83 ec 04 sub $0x4,%esp
-40002981: ff 75 fc pushl -0x4(%ebp)
-40002984: ff 75 08 pushl 0x8(%ebp)
-40002987: ff 75 f4 pushl -0xc(%ebp)
-4000298a: e8 dd fb ff ff call 4000256c <get_path_elements>
-4000298f: 83 c4 10 add $0x10,%esp
-40002992: 83 ec 08 sub $0x8,%esp
-40002995: ff 75 fc pushl -0x4(%ebp)
-40002998: ff 75 08 pushl 0x8(%ebp)
-4000299b: e8 ed 54 00 00 call 40007e8d <list_get_element_at>
-400029a0: 83 c4 10 add $0x10,%esp
-400029a3: 89 45 f8 mov %eax,-0x8(%ebp)
-400029a6: 8b 45 f8 mov -0x8(%ebp),%eax
-400029a9: c7 40 04 02 00 00 00 movl $0x2,0x4(%eax)
-400029b0: 83 ec 0c sub $0xc,%esp
-400029b3: ff 75 f4 pushl -0xc(%ebp)
-400029b6: e8 f4 5f 00 00 call 400089af <free>
-400029bb: 83 c4 10 add $0x10,%esp
-400029be: c9 leave
-400029bf: c3 ret
-
-400029c0 <resolve_relative_serv_path>:
-400029c0: 55 push %ebp
-400029c1: 89 e5 mov %esp,%ebp
-400029c3: 83 ec 28 sub $0x28,%esp
-400029c6: e8 55 52 00 00 call 40007c20 <list_create>
-400029cb: 89 45 ec mov %eax,-0x14(%ebp)
-400029ce: 83 ec 08 sub $0x8,%esp
-400029d1: 6a 00 push $0x0
-400029d3: 6a 00 push $0x0
-400029d5: e8 b6 f8 ff ff call 40002290 <getcwd>
-400029da: 83 c4 10 add $0x10,%esp
-400029dd: 89 45 f0 mov %eax,-0x10(%ebp)
-400029e0: 83 ec 04 sub $0x4,%esp
-400029e3: 6a 00 push $0x0
-400029e5: ff 75 ec pushl -0x14(%ebp)
-400029e8: ff 75 f0 pushl -0x10(%ebp)
-400029eb: e8 7c fb ff ff call 4000256c <get_path_elements>
-400029f0: 83 c4 10 add $0x10,%esp
-400029f3: 83 ec 0c sub $0xc,%esp
-400029f6: ff 75 f0 pushl -0x10(%ebp)
-400029f9: e8 b1 5f 00 00 call 400089af <free>
-400029fe: 83 c4 10 add $0x10,%esp
-40002a01: eb 1e jmp 40002a21 <resolve_relative_serv_path+0x61>
-40002a03: 83 ec 08 sub $0x8,%esp
-40002a06: 6a 00 push $0x0
-40002a08: ff 75 ec pushl -0x14(%ebp)
-40002a0b: e8 69 55 00 00 call 40007f79 <list_remove>
-40002a10: 83 c4 10 add $0x10,%esp
-40002a13: 83 ec 0c sub $0xc,%esp
-40002a16: ff 75 f4 pushl -0xc(%ebp)
-40002a19: e8 91 5f 00 00 call 400089af <free>
-40002a1e: 83 c4 10 add $0x10,%esp
-40002a21: 83 ec 08 sub $0x8,%esp
-40002a24: 6a 00 push $0x0
-40002a26: ff 75 ec pushl -0x14(%ebp)
-40002a29: e8 5f 54 00 00 call 40007e8d <list_get_element_at>
-40002a2e: 83 c4 10 add $0x10,%esp
-40002a31: 89 45 f4 mov %eax,-0xc(%ebp)
-40002a34: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40002a38: 74 0b je 40002a45 <resolve_relative_serv_path+0x85>
-40002a3a: 8b 45 f4 mov -0xc(%ebp),%eax
-40002a3d: 8b 40 04 mov 0x4(%eax),%eax
-40002a40: 83 f8 01 cmp $0x1,%eax
-40002a43: 75 be jne 40002a03 <resolve_relative_serv_path+0x43>
-40002a45: 83 ec 0c sub $0xc,%esp
-40002a48: ff 75 08 pushl 0x8(%ebp)
-40002a4b: e8 50 52 00 00 call 40007ca0 <list_size>
-40002a50: 83 c4 10 add $0x10,%esp
-40002a53: 89 45 f8 mov %eax,-0x8(%ebp)
-40002a56: 83 ec 0c sub $0xc,%esp
-40002a59: ff 75 ec pushl -0x14(%ebp)
-40002a5c: e8 3f 52 00 00 call 40007ca0 <list_size>
-40002a61: 83 c4 10 add $0x10,%esp
-40002a64: 89 45 fc mov %eax,-0x4(%ebp)
-40002a67: eb 14 jmp 40002a7d <resolve_relative_serv_path+0xbd>
-40002a69: 83 ec 04 sub $0x4,%esp
-40002a6c: ff 75 f4 pushl -0xc(%ebp)
-40002a6f: ff 75 f8 pushl -0x8(%ebp)
-40002a72: ff 75 08 pushl 0x8(%ebp)
-40002a75: e8 47 54 00 00 call 40007ec1 <list_insert>
-40002a7a: 83 c4 10 add $0x10,%esp
-40002a7d: ff 4d fc decl -0x4(%ebp)
-40002a80: 83 ec 08 sub $0x8,%esp
-40002a83: ff 75 fc pushl -0x4(%ebp)
-40002a86: ff 75 ec pushl -0x14(%ebp)
-40002a89: e8 ff 53 00 00 call 40007e8d <list_get_element_at>
-40002a8e: 83 c4 10 add $0x10,%esp
-40002a91: 89 45 f4 mov %eax,-0xc(%ebp)
-40002a94: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40002a98: 75 cf jne 40002a69 <resolve_relative_serv_path+0xa9>
-40002a9a: 83 ec 0c sub $0xc,%esp
-40002a9d: ff 75 ec pushl -0x14(%ebp)
-40002aa0: e8 a9 51 00 00 call 40007c4e <list_destroy>
-40002aa5: 83 c4 10 add $0x10,%esp
-40002aa8: c9 leave
-40002aa9: c3 ret
-
-40002aaa <calc_path_length>:
-40002aaa: 55 push %ebp
-40002aab: 89 e5 mov %esp,%ebp
-40002aad: 83 ec 18 sub $0x18,%esp
-40002ab0: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40002ab7: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40002abe: eb 4a jmp 40002b0a <calc_path_length+0x60>
-40002ac0: 8b 45 fc mov -0x4(%ebp),%eax
-40002ac3: 83 c0 08 add $0x8,%eax
-40002ac6: 83 ec 0c sub $0xc,%esp
-40002ac9: 50 push %eax
-40002aca: e8 a5 67 00 00 call 40009274 <strlen>
-40002acf: 83 c4 10 add $0x10,%esp
-40002ad2: 01 45 f4 add %eax,-0xc(%ebp)
-40002ad5: 8b 45 fc mov -0x4(%ebp),%eax
-40002ad8: 8b 40 04 mov 0x4(%eax),%eax
-40002adb: 89 45 ec mov %eax,-0x14(%ebp)
-40002ade: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
-40002ae2: 74 0e je 40002af2 <calc_path_length+0x48>
-40002ae4: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
-40002ae8: 72 20 jb 40002b0a <calc_path_length+0x60>
-40002aea: 83 7d ec 03 cmpl $0x3,-0x14(%ebp)
-40002aee: 77 1a ja 40002b0a <calc_path_length+0x60>
-40002af0: eb 15 jmp 40002b07 <calc_path_length+0x5d>
-40002af2: 83 ec 0c sub $0xc,%esp
-40002af5: 68 75 98 00 40 push $0x40009875
-40002afa: e8 75 67 00 00 call 40009274 <strlen>
-40002aff: 83 c4 10 add $0x10,%esp
-40002b02: 01 45 f4 add %eax,-0xc(%ebp)
-40002b05: eb 03 jmp 40002b0a <calc_path_length+0x60>
-40002b07: ff 45 f4 incl -0xc(%ebp)
-40002b0a: 8b 45 f8 mov -0x8(%ebp),%eax
-40002b0d: ff 45 f8 incl -0x8(%ebp)
-40002b10: 83 ec 08 sub $0x8,%esp
-40002b13: 50 push %eax
-40002b14: ff 75 08 pushl 0x8(%ebp)
-40002b17: e8 71 53 00 00 call 40007e8d <list_get_element_at>
-40002b1c: 83 c4 10 add $0x10,%esp
-40002b1f: 89 45 fc mov %eax,-0x4(%ebp)
-40002b22: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40002b26: 75 98 jne 40002ac0 <calc_path_length+0x16>
-40002b28: 8b 45 f4 mov -0xc(%ebp),%eax
-40002b2b: c9 leave
-40002b2c: c3 ret
-
-40002b2d <create_path_string>:
-40002b2d: 55 push %ebp
-40002b2e: 89 e5 mov %esp,%ebp
-40002b30: 83 ec 18 sub $0x18,%esp
-40002b33: 83 ec 0c sub $0xc,%esp
-40002b36: ff 75 08 pushl 0x8(%ebp)
-40002b39: e8 62 51 00 00 call 40007ca0 <list_size>
-40002b3e: 83 c4 10 add $0x10,%esp
-40002b41: 89 45 f8 mov %eax,-0x8(%ebp)
-40002b44: e9 83 00 00 00 jmp 40002bcc <create_path_string+0x9f>
-40002b49: 8b 45 fc mov -0x4(%ebp),%eax
-40002b4c: 83 c0 08 add $0x8,%eax
-40002b4f: 83 ec 08 sub $0x8,%esp
-40002b52: 50 push %eax
-40002b53: ff 75 0c pushl 0xc(%ebp)
-40002b56: e8 ed 66 00 00 call 40009248 <strcpy>
-40002b5b: 83 c4 10 add $0x10,%esp
-40002b5e: 8b 45 fc mov -0x4(%ebp),%eax
-40002b61: 83 c0 08 add $0x8,%eax
-40002b64: 83 ec 0c sub $0xc,%esp
-40002b67: 50 push %eax
-40002b68: e8 07 67 00 00 call 40009274 <strlen>
-40002b6d: 83 c4 10 add $0x10,%esp
-40002b70: 01 45 0c add %eax,0xc(%ebp)
-40002b73: 8b 45 fc mov -0x4(%ebp),%eax
-40002b76: 8b 40 04 mov 0x4(%eax),%eax
-40002b79: 89 45 ec mov %eax,-0x14(%ebp)
-40002b7c: 83 7d ec 02 cmpl $0x2,-0x14(%ebp)
-40002b80: 74 22 je 40002ba4 <create_path_string+0x77>
-40002b82: 83 7d ec 03 cmpl $0x3,-0x14(%ebp)
-40002b86: 74 27 je 40002baf <create_path_string+0x82>
-40002b88: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
-40002b8c: 74 02 je 40002b90 <create_path_string+0x63>
-40002b8e: eb 28 jmp 40002bb8 <create_path_string+0x8b>
-40002b90: 8b 45 0c mov 0xc(%ebp),%eax
-40002b93: c6 00 3a movb $0x3a,(%eax)
-40002b96: ff 45 0c incl 0xc(%ebp)
-40002b99: 8b 45 0c mov 0xc(%ebp),%eax
-40002b9c: c6 00 2f movb $0x2f,(%eax)
-40002b9f: ff 45 0c incl 0xc(%ebp)
-40002ba2: eb 14 jmp 40002bb8 <create_path_string+0x8b>
-40002ba4: 8b 45 0c mov 0xc(%ebp),%eax
-40002ba7: c6 00 2f movb $0x2f,(%eax)
-40002baa: ff 45 0c incl 0xc(%ebp)
-40002bad: eb 09 jmp 40002bb8 <create_path_string+0x8b>
-40002baf: 8b 45 0c mov 0xc(%ebp),%eax
-40002bb2: c6 00 7c movb $0x7c,(%eax)
-40002bb5: ff 45 0c incl 0xc(%ebp)
-40002bb8: 83 7d 10 01 cmpl $0x1,0x10(%ebp)
-40002bbc: 75 0e jne 40002bcc <create_path_string+0x9f>
-40002bbe: 83 ec 0c sub $0xc,%esp
-40002bc1: ff 75 fc pushl -0x4(%ebp)
-40002bc4: e8 e6 5d 00 00 call 400089af <free>
-40002bc9: 83 c4 10 add $0x10,%esp
-40002bcc: ff 4d f8 decl -0x8(%ebp)
-40002bcf: 83 ec 08 sub $0x8,%esp
-40002bd2: ff 75 f8 pushl -0x8(%ebp)
-40002bd5: ff 75 08 pushl 0x8(%ebp)
-40002bd8: e8 b0 52 00 00 call 40007e8d <list_get_element_at>
-40002bdd: 83 c4 10 add $0x10,%esp
-40002be0: 89 45 fc mov %eax,-0x4(%ebp)
-40002be3: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40002be7: 0f 85 5c ff ff ff jne 40002b49 <create_path_string+0x1c>
-40002bed: 8b 45 0c mov 0xc(%ebp),%eax
-40002bf0: c6 00 00 movb $0x0,(%eax)
-40002bf3: c9 leave
-40002bf4: c3 ret
-
-40002bf5 <io_split_filename>:
-40002bf5: 55 push %ebp
-40002bf6: 89 e5 mov %esp,%ebp
-40002bf8: 83 ec 18 sub $0x18,%esp
-40002bfb: e8 20 50 00 00 call 40007c20 <list_create>
-40002c00: 89 45 f4 mov %eax,-0xc(%ebp)
-40002c03: 83 ec 04 sub $0x4,%esp
-40002c06: 6a 00 push $0x0
-40002c08: ff 75 f4 pushl -0xc(%ebp)
-40002c0b: ff 75 08 pushl 0x8(%ebp)
-40002c0e: e8 59 f9 ff ff call 4000256c <get_path_elements>
-40002c13: 83 c4 10 add $0x10,%esp
-40002c16: 83 ec 08 sub $0x8,%esp
-40002c19: 6a 00 push $0x0
-40002c1b: ff 75 f4 pushl -0xc(%ebp)
-40002c1e: e8 6a 52 00 00 call 40007e8d <list_get_element_at>
-40002c23: 83 c4 10 add $0x10,%esp
-40002c26: 89 45 f0 mov %eax,-0x10(%ebp)
-40002c29: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40002c2d: 0f 84 91 00 00 00 je 40002cc4 <io_split_filename+0xcf>
-40002c33: 8b 45 f0 mov -0x10(%ebp),%eax
-40002c36: 83 c0 08 add $0x8,%eax
-40002c39: 83 ec 08 sub $0x8,%esp
-40002c3c: 68 ff 00 00 00 push $0xff
-40002c41: 50 push %eax
-40002c42: e8 a5 4d 00 00 call 400079ec <strnlen>
-40002c47: 83 c4 10 add $0x10,%esp
-40002c4a: 89 45 fc mov %eax,-0x4(%ebp)
-40002c4d: 8b 45 fc mov -0x4(%ebp),%eax
-40002c50: 40 inc %eax
-40002c51: 83 ec 0c sub $0xc,%esp
-40002c54: 50 push %eax
-40002c55: e8 7e 56 00 00 call 400082d8 <malloc>
-40002c5a: 83 c4 10 add $0x10,%esp
-40002c5d: 89 45 f8 mov %eax,-0x8(%ebp)
-40002c60: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40002c64: 74 31 je 40002c97 <io_split_filename+0xa2>
-40002c66: 8b 45 f0 mov -0x10(%ebp),%eax
-40002c69: 83 c0 08 add $0x8,%eax
-40002c6c: 83 ec 04 sub $0x4,%esp
-40002c6f: ff 75 fc pushl -0x4(%ebp)
-40002c72: 50 push %eax
-40002c73: ff 75 f8 pushl -0x8(%ebp)
-40002c76: e8 8d 66 00 00 call 40009308 <strncpy>
-40002c7b: 83 c4 10 add $0x10,%esp
-40002c7e: 8b 45 fc mov -0x4(%ebp),%eax
-40002c81: 03 45 f8 add -0x8(%ebp),%eax
-40002c84: c6 00 00 movb $0x0,(%eax)
-40002c87: eb 0e jmp 40002c97 <io_split_filename+0xa2>
-40002c89: 83 ec 0c sub $0xc,%esp
-40002c8c: ff 75 f0 pushl -0x10(%ebp)
-40002c8f: e8 1b 5d 00 00 call 400089af <free>
-40002c94: 83 c4 10 add $0x10,%esp
-40002c97: 83 ec 0c sub $0xc,%esp
-40002c9a: ff 75 f4 pushl -0xc(%ebp)
-40002c9d: e8 99 50 00 00 call 40007d3b <list_pop>
-40002ca2: 83 c4 10 add $0x10,%esp
-40002ca5: 89 45 f0 mov %eax,-0x10(%ebp)
-40002ca8: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40002cac: 75 db jne 40002c89 <io_split_filename+0x94>
-40002cae: 83 ec 0c sub $0xc,%esp
-40002cb1: ff 75 f4 pushl -0xc(%ebp)
-40002cb4: e8 95 4f 00 00 call 40007c4e <list_destroy>
-40002cb9: 83 c4 10 add $0x10,%esp
-40002cbc: 8b 45 f8 mov -0x8(%ebp),%eax
-40002cbf: 89 45 ec mov %eax,-0x14(%ebp)
-40002cc2: eb 15 jmp 40002cd9 <io_split_filename+0xe4>
-40002cc4: 83 ec 0c sub $0xc,%esp
-40002cc7: ff 75 f4 pushl -0xc(%ebp)
-40002cca: e8 7f 4f 00 00 call 40007c4e <list_destroy>
-40002ccf: 83 c4 10 add $0x10,%esp
-40002cd2: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002cd9: 8b 45 ec mov -0x14(%ebp),%eax
-40002cdc: c9 leave
-40002cdd: c3 ret
-
-40002cde <io_split_dirname>:
-40002cde: 55 push %ebp
-40002cdf: 89 e5 mov %esp,%ebp
-40002ce1: 53 push %ebx
-40002ce2: 83 ec 14 sub $0x14,%esp
-40002ce5: 89 e0 mov %esp,%eax
-40002ce7: 89 c3 mov %eax,%ebx
-40002ce9: 83 ec 0c sub $0xc,%esp
-40002cec: ff 75 08 pushl 0x8(%ebp)
-40002cef: e8 80 65 00 00 call 40009274 <strlen>
-40002cf4: 83 c4 10 add $0x10,%esp
-40002cf7: 89 45 f8 mov %eax,-0x8(%ebp)
-40002cfa: 8b 45 f8 mov -0x8(%ebp),%eax
-40002cfd: 83 c0 04 add $0x4,%eax
-40002d00: 83 c0 0f add $0xf,%eax
-40002d03: 83 c0 0f add $0xf,%eax
-40002d06: c1 e8 04 shr $0x4,%eax
-40002d09: c1 e0 04 shl $0x4,%eax
-40002d0c: 29 c4 sub %eax,%esp
-40002d0e: 89 65 e8 mov %esp,-0x18(%ebp)
-40002d11: 8b 45 e8 mov -0x18(%ebp),%eax
-40002d14: 83 c0 0f add $0xf,%eax
-40002d17: c1 e8 04 shr $0x4,%eax
-40002d1a: c1 e0 04 shl $0x4,%eax
-40002d1d: 89 45 e8 mov %eax,-0x18(%ebp)
-40002d20: 8b 45 e8 mov -0x18(%ebp),%eax
-40002d23: 89 45 f4 mov %eax,-0xc(%ebp)
-40002d26: 8b 45 f4 mov -0xc(%ebp),%eax
-40002d29: 83 ec 04 sub $0x4,%esp
-40002d2c: ff 75 f8 pushl -0x8(%ebp)
-40002d2f: ff 75 08 pushl 0x8(%ebp)
-40002d32: 50 push %eax
-40002d33: e8 30 62 00 00 call 40008f68 <memcpy>
-40002d38: 83 c4 10 add $0x10,%esp
-40002d3b: 8b 55 f4 mov -0xc(%ebp),%edx
-40002d3e: 8b 45 f8 mov -0x8(%ebp),%eax
-40002d41: 8d 04 02 lea (%edx,%eax,1),%eax
-40002d44: 83 ec 04 sub $0x4,%esp
-40002d47: 6a 04 push $0x4
-40002d49: 68 78 98 00 40 push $0x40009878
-40002d4e: 50 push %eax
-40002d4f: e8 14 62 00 00 call 40008f68 <memcpy>
-40002d54: 83 c4 10 add $0x10,%esp
-40002d57: 8b 45 f4 mov -0xc(%ebp),%eax
-40002d5a: 83 ec 0c sub $0xc,%esp
-40002d5d: 50 push %eax
-40002d5e: e8 ef fa ff ff call 40002852 <io_get_absolute_path>
-40002d63: 83 c4 10 add $0x10,%esp
-40002d66: 89 dc mov %ebx,%esp
-40002d68: 8b 5d fc mov -0x4(%ebp),%ebx
-40002d6b: c9 leave
-40002d6c: c3 ret
-40002d6d: 90 nop
-40002d6e: 90 nop
-40002d6f: 90 nop
-
-40002d70 <mem_dma_allocate>:
-/*
- * Copyright (c) 2007 Kevin Wolf
- *
- * This program is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
-40002d70: 55 push %ebp
-40002d71: 89 e5 mov %esp,%ebp
-40002d73: 53 push %ebx
-40002d74: 83 ec 10 sub $0x10,%esp
-40002d77: 8b 5d 08 mov 0x8(%ebp),%ebx
- * and/or modify it under the terms of the Do What The Fuck You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
-40002d7a: 8b 4d 0c mov 0xc(%ebp),%ecx
-40002d7d: 8b 55 10 mov 0x10(%ebp),%edx
-40002d80: 8d 45 f4 lea -0xc(%ebp),%eax
-40002d83: 83 c0 04 add $0x4,%eax
-40002d86: 50 push %eax
-40002d87: 52 push %edx
-40002d88: 51 push %ecx
-40002d89: b8 01 00 00 00 mov $0x1,%eax
-40002d8e: cd 30 int $0x30
-40002d90: 83 c4 0c add $0xc,%esp
-40002d93: 89 45 f4 mov %eax,-0xc(%ebp)
-#define _CDI_IO_H_
-
-#include <stdint.h>
-
-static inline uint16_t cdi_inw(uint16_t _port)
-{
-40002d96: 8b 45 f4 mov -0xc(%ebp),%eax
-40002d99: 8b 55 f8 mov -0x8(%ebp),%edx
-40002d9c: 89 03 mov %eax,(%ebx)
-40002d9e: 89 53 04 mov %edx,0x4(%ebx)
- uint16_t result;
-40002da1: 89 d8 mov %ebx,%eax
-40002da3: 83 c4 10 add $0x10,%esp
-40002da6: 5b pop %ebx
-40002da7: c9 leave
-40002da8: c2 04 00 ret $0x4
-
-40002dab <mem_allocate>:
- __asm__ ("inw %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-40002dab: 55 push %ebp
-40002dac: 89 e5 mov %esp,%ebp
-40002dae: 83 ec 10 sub $0x10,%esp
-
-40002db1: 8d 45 f8 lea -0x8(%ebp),%eax
-40002db4: ff 75 0c pushl 0xc(%ebp)
-40002db7: ff 75 08 pushl 0x8(%ebp)
-40002dba: 50 push %eax
-40002dbb: e8 b0 ff ff ff call 40002d70 <mem_dma_allocate>
-40002dc0: 83 c4 08 add $0x8,%esp
-static inline uint8_t cdi_inb(uint16_t _port)
-40002dc3: 8b 45 f8 mov -0x8(%ebp),%eax
-{
-40002dc6: c9 leave
-40002dc7: c3 ret
-
-40002dc8 <mem_allocate_physical>:
- uint8_t result;
- __asm__ ("inb %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-40002dc8: 55 push %ebp
-40002dc9: 89 e5 mov %esp,%ebp
-40002dcb: 83 ec 10 sub $0x10,%esp
-}
-
-static inline uint32_t cdi_inl(uint16_t _port)
-40002dce: 8b 4d 08 mov 0x8(%ebp),%ecx
-40002dd1: 8b 55 0c mov 0xc(%ebp),%edx
-40002dd4: 8b 45 10 mov 0x10(%ebp),%eax
-40002dd7: 50 push %eax
-40002dd8: 52 push %edx
-40002dd9: 51 push %ecx
-40002dda: b8 3d 00 00 00 mov $0x3d,%eax
-40002ddf: cd 30 int $0x30
-40002de1: 83 c4 0c add $0xc,%esp
-40002de4: 89 45 f8 mov %eax,-0x8(%ebp)
- return result;
-}
-
-
-
-static inline void cdi_outw(uint16_t _port, uint16_t _data)
-40002de7: 8b 45 f8 mov -0x8(%ebp),%eax
-{
-40002dea: c9 leave
-40002deb: c3 ret
-
-40002dec <mem_free>:
- __asm__ ("outw %0, %1" : : "a" (_data), "Nd" (_port));
-}
-
-40002dec: 55 push %ebp
-40002ded: 89 e5 mov %esp,%ebp
-40002def: 83 ec 10 sub $0x10,%esp
-static inline void cdi_outb(uint16_t _port, uint8_t _data)
-{
-40002df2: 8b 55 08 mov 0x8(%ebp),%edx
-40002df5: 8b 45 0c mov 0xc(%ebp),%eax
-40002df8: 50 push %eax
-40002df9: 52 push %edx
-40002dfa: b8 02 00 00 00 mov $0x2,%eax
-40002dff: cd 30 int $0x30
-40002e01: 83 c4 08 add $0x8,%esp
-40002e04: 89 45 fc mov %eax,-0x4(%ebp)
-
-static inline void cdi_outl(uint16_t _port, uint32_t _data)
-{
- __asm__ ("outl %0, %1" : : "a"(_data), "Nd" (_port));
-}
-
-40002e07: 8b 45 fc mov -0x4(%ebp),%eax
-#endif
-40002e0a: c9 leave
-40002e0b: c3 ret
-
-40002e0c <mem_free_physical>:
-
-40002e0c: 55 push %ebp
-40002e0d: 89 e5 mov %esp,%ebp
-40002e0f: 8b 55 08 mov 0x8(%ebp),%edx
-40002e12: 8b 45 0c mov 0xc(%ebp),%eax
-40002e15: 50 push %eax
-40002e16: 52 push %edx
-40002e17: b8 3e 00 00 00 mov $0x3e,%eax
-40002e1c: cd 30 int $0x30
-40002e1e: 83 c4 08 add $0x8,%esp
-40002e21: c9 leave
-40002e22: c3 ret
-40002e23: 90 nop
-
-40002e24 <init_messaging>:
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40002e24: 55 push %ebp
-40002e25: 89 e5 mov %esp,%ebp
-40002e27: 83 ec 18 sub $0x18,%esp
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40002e2a: e8 01 ef ff ff call 40001d30 <get_pid>
-40002e2f: a3 c4 a4 00 40 mov %eax,0x4000a4c4
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-40002e34: 83 ec 0c sub $0xc,%esp
-40002e37: 68 c0 31 00 40 push $0x400031c0
-40002e3c: e8 3f 04 00 00 call 40003280 <set_rpc_handler>
-40002e41: 83 c4 10 add $0x10,%esp
- .block_size = ATA_SECTOR_SIZE,
-40002e44: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40002e4b: eb 2c jmp 40002e79 <init_messaging+0x55>
- .buffer = buffer,
-40002e4d: 8b 55 fc mov -0x4(%ebp),%edx
-40002e50: 89 d0 mov %edx,%eax
-40002e52: d1 e0 shl %eax
-40002e54: 01 d0 add %edx,%eax
-40002e56: c1 e0 02 shl $0x2,%eax
-40002e59: c6 80 60 a6 00 40 00 movb $0x0,0x4000a660(%eax)
-
-40002e60: 8b 55 fc mov -0x4(%ebp),%edx
-40002e63: 89 d0 mov %edx,%eax
-40002e65: d1 e0 shl %eax
-40002e67: 01 d0 add %edx,%eax
-40002e69: c1 e0 02 shl $0x2,%eax
-40002e6c: c7 80 68 a6 00 40 00 movl $0x0,0x4000a668(%eax)
-40002e73: 00 00 00
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-40002e76: ff 45 fc incl -0x4(%ebp)
-40002e79: 83 7d fc 1f cmpl $0x1f,-0x4(%ebp)
-40002e7d: 76 ce jbe 40002e4d <init_messaging+0x29>
- .buffer = buffer,
-
- .error = 0
- };
-40002e7f: c9 leave
-40002e80: c3 ret
-
-40002e81 <register_message_handler>:
-
- // Request starten
- if (!ata_request(&request)) {
-40002e81: 55 push %ebp
-40002e82: 89 e5 mov %esp,%ebp
-40002e84: 83 ec 18 sub $0x18,%esp
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
-40002e87: 83 ec 04 sub $0x4,%esp
-40002e8a: 6a 08 push $0x8
-40002e8c: 6a 00 push $0x0
-40002e8e: 8d 45 f0 lea -0x10(%ebp),%eax
-40002e91: 50 push %eax
-40002e92: e8 7d 62 00 00 call 40009114 <memset>
-40002e97: 83 c4 10 add $0x10,%esp
- // Ein ATA-Geraet
-40002e9a: 83 ec 04 sub $0x4,%esp
-40002e9d: 6a 08 push $0x8
-40002e9f: ff 75 08 pushl 0x8(%ebp)
-40002ea2: 8d 45 f0 lea -0x10(%ebp),%eax
-40002ea5: 50 push %eax
-40002ea6: e8 5d 64 00 00 call 40009308 <strncpy>
-40002eab: 83 c4 10 add $0x10,%esp
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
- return 1;
-40002eae: c7 45 fc 20 00 00 00 movl $0x20,-0x4(%ebp)
-}
-40002eb5: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40002ebc: eb 51 jmp 40002f0f <register_message_handler+0x8e>
-
-40002ebe: 8b 55 f8 mov -0x8(%ebp),%edx
-40002ec1: 89 d0 mov %edx,%eax
-40002ec3: d1 e0 shl %eax
-40002ec5: 01 d0 add %edx,%eax
-40002ec7: c1 e0 02 shl $0x2,%eax
-40002eca: 8a 80 60 a6 00 40 mov 0x4000a660(%eax),%al
-40002ed0: 84 c0 test %al,%al
-40002ed2: 75 08 jne 40002edc <register_message_handler+0x5b>
-/**
-40002ed4: 8b 45 f8 mov -0x8(%ebp),%eax
-40002ed7: 89 45 fc mov %eax,-0x4(%ebp)
-40002eda: eb 30 jmp 40002f0c <register_message_handler+0x8b>
- * Sektoren von einem ATA-Geraet lesen
-40002edc: 8b 55 f8 mov -0x8(%ebp),%edx
-40002edf: 89 d0 mov %edx,%eax
-40002ee1: d1 e0 shl %eax
-40002ee3: 01 d0 add %edx,%eax
-40002ee5: c1 e0 02 shl $0x2,%eax
-40002ee8: 05 60 a6 00 40 add $0x4000a660,%eax
-40002eed: 83 ec 04 sub $0x4,%esp
-40002ef0: 6a 08 push $0x8
-40002ef2: 50 push %eax
-40002ef3: 8d 45 f0 lea -0x10(%ebp),%eax
-40002ef6: 50 push %eax
-40002ef7: e8 a0 63 00 00 call 4000929c <strncmp>
-40002efc: 83 c4 10 add $0x10,%esp
-40002eff: 85 c0 test %eax,%eax
-40002f01: 75 09 jne 40002f0c <register_message_handler+0x8b>
- *
-40002f03: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002f0a: eb 5c jmp 40002f68 <register_message_handler+0xe7>
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-40002f0c: ff 45 f8 incl -0x8(%ebp)
-40002f0f: 83 7d f8 1f cmpl $0x1f,-0x8(%ebp)
-40002f13: 76 a9 jbe 40002ebe <register_message_handler+0x3d>
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-40002f15: 83 7d fc 20 cmpl $0x20,-0x4(%ebp)
-40002f19: 75 09 jne 40002f24 <register_message_handler+0xa3>
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40002f1b: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40002f22: eb 44 jmp 40002f68 <register_message_handler+0xe7>
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40002f24: 8b 55 fc mov -0x4(%ebp),%edx
-40002f27: 89 d0 mov %edx,%eax
-40002f29: d1 e0 shl %eax
-40002f2b: 01 d0 add %edx,%eax
-40002f2d: c1 e0 02 shl $0x2,%eax
-40002f30: 8d 90 60 a6 00 40 lea 0x4000a660(%eax),%edx
-40002f36: 83 ec 04 sub $0x4,%esp
-40002f39: 6a 08 push $0x8
-40002f3b: 8d 45 f0 lea -0x10(%ebp),%eax
-40002f3e: 50 push %eax
-40002f3f: 52 push %edx
-40002f40: e8 c3 63 00 00 call 40009308 <strncpy>
-40002f45: 83 c4 10 add $0x10,%esp
-{
-40002f48: 8b 55 fc mov -0x4(%ebp),%edx
-40002f4b: 89 d0 mov %edx,%eax
-40002f4d: d1 e0 shl %eax
-40002f4f: 01 d0 add %edx,%eax
-40002f51: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx
-40002f58: 8b 45 0c mov 0xc(%ebp),%eax
-40002f5b: 89 82 68 a6 00 40 mov %eax,0x4000a668(%edx)
- int result = 1;
- struct ata_request request;
-40002f61: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-40002f68: 8b 45 ec mov -0x14(%ebp),%eax
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-40002f6b: c9 leave
-40002f6c: c3 ret
-
-40002f6d <register_intr_handler>:
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
-40002f6d: 55 push %ebp
-40002f6e: 89 e5 mov %esp,%ebp
-40002f70: 83 ec 08 sub $0x8,%esp
-40002f73: 8b 45 08 mov 0x8(%ebp),%eax
-40002f76: 88 45 fc mov %al,-0x4(%ebp)
- uint64_t lba = start;
-40002f79: 0f b6 55 fc movzbl -0x4(%ebp),%edx
-40002f7d: 8b 45 0c mov 0xc(%ebp),%eax
-40002f80: 89 04 95 c0 a0 00 40 mov %eax,0x4000a0c0(,%edx,4)
-
-40002f87: 0f b6 45 fc movzbl -0x4(%ebp),%eax
-40002f8b: 83 ec 0c sub $0xc,%esp
-40002f8e: 50 push %eax
-40002f8f: e8 a4 3b 00 00 call 40006b38 <add_intr_handler>
-40002f94: 83 c4 10 add $0x10,%esp
- // Anzahl der Sektoren die noch uebrig sind
-40002f97: c9 leave
-40002f98: c3 ret
-
-40002f99 <librpc_c_rpc_handler>:
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-40002f99: 55 push %ebp
-40002f9a: 89 e5 mov %esp,%ebp
-40002f9c: 83 ec 18 sub $0x18,%esp
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
-40002f9f: 8b 45 10 mov 0x10(%ebp),%eax
-40002fa2: 8b 00 mov (%eax),%eax
-40002fa4: 89 45 f8 mov %eax,-0x8(%ebp)
- }
-40002fa7: 8b 45 10 mov 0x10(%ebp),%eax
-40002faa: 83 c0 04 add $0x4,%eax
-40002fad: 8b 00 mov (%eax),%eax
-40002faf: 89 45 fc mov %eax,-0x4(%ebp)
-
- // Request vorbereiten
- request.dev = dev;
- // TODO: DMA, UltraDMA...
-40002fb2: 81 7d f8 ff 00 00 00 cmpl $0xff,-0x8(%ebp)
-40002fb9: 77 31 ja 40002fec <librpc_c_rpc_handler+0x53>
- request.protocol = PIO;
- request.flags.direction = READ;
-40002fbb: 8b 45 f8 mov -0x8(%ebp),%eax
-40002fbe: 8b 04 85 c0 a0 00 40 mov 0x4000a0c0(,%eax,4),%eax
-40002fc5: 85 c0 test %eax,%eax
-40002fc7: 0f 84 1e 01 00 00 je 400030eb <librpc_c_rpc_handler+0x152>
-40002fcd: a1 c4 a4 00 40 mov 0x4000a4c4,%eax
-40002fd2: 39 45 08 cmp %eax,0x8(%ebp)
-40002fd5: 0f 85 10 01 00 00 jne 400030eb <librpc_c_rpc_handler+0x152>
- // FIXME
-40002fdb: 8b 45 f8 mov -0x8(%ebp),%eax
-40002fde: 8b 04 85 c0 a0 00 40 mov 0x4000a0c0(,%eax,4),%eax
-40002fe5: ff d0 call *%eax
-40002fe7: e9 ff 00 00 00 jmp 400030eb <librpc_c_rpc_handler+0x152>
- request.flags.poll = 1;
- request.flags.ata = 0;
-40002fec: 81 7d f8 ff 00 00 00 cmpl $0xff,-0x8(%ebp)
-40002ff3: 76 22 jbe 40003017 <librpc_c_rpc_handler+0x7e>
-40002ff5: 81 7d f8 ff 01 00 00 cmpl $0x1ff,-0x8(%ebp)
-40002ffc: 77 19 ja 40003017 <librpc_c_rpc_handler+0x7e>
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
-40002ffe: 8b 45 f8 mov -0x8(%ebp),%eax
-40003001: 2d 00 01 00 00 sub $0x100,%eax
-40003006: 83 ec 0c sub $0xc,%esp
-40003009: 50 push %eax
-4000300a: e8 3f 10 00 00 call 4000404e <raise>
-4000300f: 83 c4 10 add $0x10,%esp
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
- request.flags.poll = 1;
- request.flags.ata = 0;
-40003012: e9 d4 00 00 00 jmp 400030eb <librpc_c_rpc_handler+0x152>
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
-40003017: 81 7d f8 00 02 00 00 cmpl $0x200,-0x8(%ebp)
-4000301e: 0f 85 87 00 00 00 jne 400030ab <librpc_c_rpc_handler+0x112>
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
-40003024: 8b 45 10 mov 0x10(%ebp),%eax
-40003027: 83 c0 08 add $0x8,%eax
-4000302a: 83 ec 08 sub $0x8,%esp
-4000302d: 6a 08 push $0x8
-4000302f: 50 push %eax
-40003030: e8 b7 49 00 00 call 400079ec <strnlen>
-40003035: 83 c4 10 add $0x10,%esp
-40003038: 85 c0 test %eax,%eax
-4000303a: 0f 84 ab 00 00 00 je 400030eb <librpc_c_rpc_handler+0x152>
- request.buffer = current_buffer;
-
- request.error = NO_ERROR;
-
-40003040: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40003047: eb 5a jmp 400030a3 <librpc_c_rpc_handler+0x10a>
- // TODO: LBA48
-40003049: 8b 55 f4 mov -0xc(%ebp),%edx
-4000304c: 89 d0 mov %edx,%eax
-4000304e: d1 e0 shl %eax
-40003050: 01 d0 add %edx,%eax
-40003052: c1 e0 02 shl $0x2,%eax
-40003055: 05 60 a6 00 40 add $0x4000a660,%eax
-4000305a: 8b 55 10 mov 0x10(%ebp),%edx
-4000305d: 83 c2 08 add $0x8,%edx
-40003060: 83 ec 04 sub $0x4,%esp
-40003063: 6a 08 push $0x8
-40003065: 50 push %eax
-40003066: 52 push %edx
-40003067: e8 30 62 00 00 call 4000929c <strncmp>
-4000306c: 83 c4 10 add $0x10,%esp
-4000306f: 85 c0 test %eax,%eax
-40003071: 75 2d jne 400030a0 <librpc_c_rpc_handler+0x107>
- // TODO: CHS
-40003073: 8b 55 f4 mov -0xc(%ebp),%edx
-40003076: 89 d0 mov %edx,%eax
-40003078: d1 e0 shl %eax
-4000307a: 01 d0 add %edx,%eax
-4000307c: c1 e0 02 shl $0x2,%eax
-4000307f: 8b 88 68 a6 00 40 mov 0x4000a668(%eax),%ecx
-40003085: 8b 45 10 mov 0x10(%ebp),%eax
-40003088: 83 c0 10 add $0x10,%eax
-4000308b: 8b 55 0c mov 0xc(%ebp),%edx
-4000308e: 83 ea 10 sub $0x10,%edx
-40003091: 50 push %eax
-40003092: 52 push %edx
-40003093: ff 75 fc pushl -0x4(%ebp)
-40003096: ff 75 08 pushl 0x8(%ebp)
-40003099: ff d1 call *%ecx
-4000309b: 83 c4 10 add $0x10,%esp
-
- // Request ausfuehren
- if (!ata_request(&request)) {
- result = 0;
- break;
- }
-4000309e: eb 4b jmp 400030eb <librpc_c_rpc_handler+0x152>
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-
- request.error = NO_ERROR;
-
-400030a0: ff 45 f4 incl -0xc(%ebp)
-400030a3: 83 7d f4 1f cmpl $0x1f,-0xc(%ebp)
-400030a7: 7e a0 jle 40003049 <librpc_c_rpc_handler+0xb0>
-400030a9: eb 40 jmp 400030eb <librpc_c_rpc_handler+0x152>
- result = 0;
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-400030ab: 81 7d f8 01 02 00 00 cmpl $0x201,-0x8(%ebp)
-400030b2: 75 20 jne 400030d4 <librpc_c_rpc_handler+0x13b>
- count_left -= current_count;
- lba += current_count;
-400030b4: a1 c0 a4 00 40 mov 0x4000a4c0,%eax
-400030b9: 8b 55 10 mov 0x10(%ebp),%edx
-400030bc: 83 c2 08 add $0x8,%edx
-400030bf: 8b 4d 0c mov 0xc(%ebp),%ecx
-400030c2: 83 e9 08 sub $0x8,%ecx
-400030c5: 52 push %edx
-400030c6: 51 push %ecx
-400030c7: ff 75 fc pushl -0x4(%ebp)
-400030ca: ff 75 08 pushl 0x8(%ebp)
-400030cd: ff d0 call *%eax
-400030cf: 83 c4 10 add $0x10,%esp
-400030d2: eb 17 jmp 400030eb <librpc_c_rpc_handler+0x152>
-400030d4: 81 7d f8 02 02 00 00 cmpl $0x202,-0x8(%ebp)
-400030db: 75 0e jne 400030eb <librpc_c_rpc_handler+0x152>
-400030dd: 83 ec 0c sub $0xc,%esp
-400030e0: ff 75 fc pushl -0x4(%ebp)
-400030e3: e8 b6 06 00 00 call 4000379e <timer_callback>
-400030e8: 83 c4 10 add $0x10,%esp
-400030eb: c9 leave
-400030ec: c3 ret
-400030ed: 90 nop
-400030ee: 90 nop
-400030ef: 90 nop
-
-400030f0 <msleep>:
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-400030f0: 55 push %ebp
-400030f1: 89 e5 mov %esp,%ebp
-400030f3: 53 push %ebx
-400030f4: 83 ec 24 sub $0x24,%esp
-#include "cdi/io.h"
-400030f7: e8 50 3a 00 00 call 40006b4c <get_tick_count>
-400030fc: 89 c1 mov %eax,%ecx
-400030fe: 89 d3 mov %edx,%ebx
-40003100: 8b 55 08 mov 0x8(%ebp),%edx
-40003103: 89 d0 mov %edx,%eax
-40003105: c1 e0 02 shl $0x2,%eax
-40003108: 01 d0 add %edx,%eax
-4000310a: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx
-40003111: 01 d0 add %edx,%eax
-40003113: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx
-4000311a: 01 d0 add %edx,%eax
-4000311c: c1 e0 03 shl $0x3,%eax
-4000311f: ba 00 00 00 00 mov $0x0,%edx
-40003124: 01 c8 add %ecx,%eax
-40003126: 11 da adc %ebx,%edx
-40003128: 89 45 f0 mov %eax,-0x10(%ebp)
-4000312b: 89 55 f4 mov %edx,-0xc(%ebp)
-
-4000312e: eb 01 jmp 40003131 <msleep+0x41>
-#include "device.h"
-
-40003130: 90 nop
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-
-40003131: e8 16 3a 00 00 call 40006b4c <get_tick_count>
-40003136: 89 45 e0 mov %eax,-0x20(%ebp)
-40003139: 89 55 e4 mov %edx,-0x1c(%ebp)
-4000313c: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000313f: 3b 45 f4 cmp -0xc(%ebp),%eax
-40003142: 72 ec jb 40003130 <msleep+0x40>
-40003144: 8b 45 e4 mov -0x1c(%ebp),%eax
-40003147: 3b 45 f4 cmp -0xc(%ebp),%eax
-4000314a: 77 08 ja 40003154 <msleep+0x64>
-4000314c: 8b 45 e0 mov -0x20(%ebp),%eax
-4000314f: 3b 45 f0 cmp -0x10(%ebp),%eax
-40003152: 72 dc jb 40003130 <msleep+0x40>
-#include "device.h"
-
-
-/**
-40003154: 83 c4 24 add $0x24,%esp
-40003157: 5b pop %ebx
-40003158: c9 leave
-40003159: c3 ret
-4000315a: 90 nop
-4000315b: 90 nop
-
-4000315c <request_ports>:
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-4000315c: 55 push %ebp
-4000315d: 89 e5 mov %esp,%ebp
-4000315f: 83 ec 10 sub $0x10,%esp
-#include "cdi/misc.h"
-#include "cdi/io.h"
-40003162: ff 75 0c pushl 0xc(%ebp)
-40003165: ff 75 08 pushl 0x8(%ebp)
-40003168: b8 09 00 00 00 mov $0x9,%eax
-4000316d: cd 30 int $0x30
-4000316f: 83 c4 08 add $0x8,%esp
-40003172: 89 45 fc mov %eax,-0x4(%ebp)
-
-
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-40003175: 8b 45 fc mov -0x4(%ebp),%eax
- */
-40003178: c9 leave
-40003179: c3 ret
-
-4000317a <release_ports>:
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-4000317a: 55 push %ebp
-4000317b: 89 e5 mov %esp,%ebp
-4000317d: 83 ec 10 sub $0x10,%esp
-
- // Request vorbereiten
-40003180: ff 75 0c pushl 0xc(%ebp)
-40003183: ff 75 08 pushl 0x8(%ebp)
-40003186: b8 0a 00 00 00 mov $0xa,%eax
-4000318b: cd 30 int $0x30
-4000318d: 83 c4 08 add $0x8,%esp
-40003190: 89 45 fc mov %eax,-0x4(%ebp)
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-40003193: 8b 45 fc mov -0x4(%ebp),%eax
- .protocol = PIO,
-40003196: c9 leave
-40003197: c3 ret
-
-40003198 <p>:
-/*
- * Copyright (c) 2007 The tyndur Project. All rights reserved.
- *
- * This code is derived from software contributed to the tyndur Project
-40003198: 55 push %ebp
-40003199: 89 e5 mov %esp,%ebp
- * by Antoine Kaufmann.
-4000319b: b8 0b 00 00 00 mov $0xb,%eax
-400031a0: cd 30 int $0x30
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
-400031a2: c9 leave
-400031a3: c3 ret
-
-400031a4 <v>:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
-400031a4: 55 push %ebp
-400031a5: 89 e5 mov %esp,%ebp
- * notice, this list of conditions and the following disclaimer in the
-400031a7: b8 0c 00 00 00 mov $0xc,%eax
-400031ac: 6a 00 push $0x0
-400031ae: cd 30 int $0x30
-400031b0: 83 c4 04 add $0x4,%esp
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the tyndur Project
- * and its contributors.
- * 4. Neither the name of the tyndur Project nor the names of its
-400031b3: c9 leave
-400031b4: c3 ret
-400031b5: 90 nop
-400031b6: 90 nop
-400031b7: 90 nop
-400031b8: 90 nop
-400031b9: 90 nop
-400031ba: 90 nop
-400031bb: 90 nop
-400031bc: 90 nop
-400031bd: 90 nop
-400031be: 90 nop
-400031bf: 90 nop
-
-400031c0 <librpc_rpc_handler>:
-400031c0: 60 pusha
-400031c1: 8b 44 24 20 mov 0x20(%esp),%eax
-400031c5: 8b 4c 24 24 mov 0x24(%esp),%ecx
-400031c9: 8d 54 24 28 lea 0x28(%esp),%edx
-400031cd: 52 push %edx
-400031ce: 50 push %eax
-400031cf: 51 push %ecx
-400031d0: e8 c4 fd ff ff call 40002f99 <librpc_c_rpc_handler>
-400031d5: 83 c4 0c add $0xc,%esp
-400031d8: 61 popa
-400031d9: b8 38 00 00 00 mov $0x38,%eax
-400031de: cd 30 int $0x30
-400031e0: f4 hlt
-400031e1: 50 push %eax
-400031e2: 8b 44 24 04 mov 0x4(%esp),%eax
-400031e6: 83 e0 03 and $0x3,%eax
-400031e9: 74 0a je 400031f5 <librpc_rpc_handler.1>
-400031eb: 8b 44 24 04 mov 0x4(%esp),%eax
-400031ef: 83 c8 03 or $0x3,%eax
-400031f2: 40 inc %eax
-400031f3: eb 04 jmp 400031f9 <librpc_rpc_handler.2>
-
-400031f5 <librpc_rpc_handler.1>:
-400031f5: 8b 44 24 04 mov 0x4(%esp),%eax
-
-400031f9 <librpc_rpc_handler.2>:
-400031f9: 01 c4 add %eax,%esp
-400031fb: 83 c4 0c add $0xc,%esp
-400031fe: f7 d8 neg %eax
-40003200: 8b 44 04 f4 mov -0xc(%esp,%eax,1),%eax
-40003204: c3 ret
-40003205: 90 nop
-40003206: 90 nop
-40003207: 90 nop
-
-40003208 <rpc>:
-/*
- * Copyright (c) 2007 The tyndur Project. All rights reserved.
- *
- * This code is derived from software contributed to the tyndur Project
- * by Antoine Kaufmann.
-40003208: 55 push %ebp
-40003209: 89 e5 mov %esp,%ebp
-4000320b: 83 ec 10 sub $0x10,%esp
- *
-4000320e: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
-40003215: 8b 45 fc mov -0x4(%ebp),%eax
-40003218: 6a 00 push $0x0
-4000321a: ff 75 08 pushl 0x8(%ebp)
-4000321d: b8 33 00 00 00 mov $0x33,%eax
-40003222: cd 30 int $0x30
-40003224: 83 c4 08 add $0x8,%esp
-40003227: 89 45 fc mov %eax,-0x4(%ebp)
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
-4000322a: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000322e: 75 e5 jne 40003215 <rpc+0xd>
- * This product includes software developed by the tyndur Project
-40003230: c9 leave
-40003231: c3 ret
-
-40003232 <send_message>:
- * and its contributors.
- * 4. Neither the name of the tyndur Project nor the names of its
- * contributors may be used to endorse or promote products derived
-40003232: 55 push %ebp
-40003233: 89 e5 mov %esp,%ebp
-40003235: 83 ec 14 sub $0x14,%esp
- * from this software without specific prior written permission.
-40003238: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- *
-4000323f: 8b 45 0c mov 0xc(%ebp),%eax
-40003242: 89 45 f4 mov %eax,-0xc(%ebp)
-40003245: 8b 45 10 mov 0x10(%ebp),%eax
-40003248: 89 45 f8 mov %eax,-0x8(%ebp)
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-4000324b: 8d 45 f4 lea -0xc(%ebp),%eax
-4000324e: 89 45 ec mov %eax,-0x14(%ebp)
-40003251: 8b 55 fc mov -0x4(%ebp),%edx
-40003254: 89 d0 mov %edx,%eax
-40003256: ff 75 18 pushl 0x18(%ebp)
-40003259: ff 75 14 pushl 0x14(%ebp)
-4000325c: ff 75 ec pushl -0x14(%ebp)
-4000325f: 6a 08 push $0x8
-40003261: ff 75 08 pushl 0x8(%ebp)
-40003264: b8 37 00 00 00 mov $0x37,%eax
-40003269: cd 30 int $0x30
-4000326b: 83 c4 14 add $0x14,%esp
-4000326e: 89 45 ec mov %eax,-0x14(%ebp)
-40003271: 8b 45 ec mov -0x14(%ebp),%eax
-40003274: 89 45 fc mov %eax,-0x4(%ebp)
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-40003277: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000327b: 75 ce jne 4000324b <send_message+0x19>
-#include <stdio.h>
-4000327d: c9 leave
-4000327e: c3 ret
-4000327f: 90 nop
-
-40003280 <set_rpc_handler>:
-#include "syscall.h"
-
-
-/**
-40003280: 55 push %ebp
-40003281: 89 e5 mov %esp,%ebp
- * Prozessnummer des aktuellen Prozesses abfragen.
-40003283: 8b 45 08 mov 0x8(%ebp),%eax
-40003286: 50 push %eax
-40003287: b8 32 00 00 00 mov $0x32,%eax
-4000328c: cd 30 int $0x30
-4000328e: 83 c4 04 add $0x4,%esp
- *
- * @return Prozessnummer
- */
-pid_t get_pid()
-{
- pid_t pid;
-40003291: c9 leave
-40003292: c3 ret
-40003293: 90 nop
-
-40003294 <init_sync_messages>:
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-40003294: 55 push %ebp
-40003295: 89 e5 mov %esp,%ebp
-40003297: 83 ec 08 sub $0x8,%esp
- .error = 0
-4000329a: e8 81 49 00 00 call 40007c20 <list_create>
-4000329f: a3 c8 a4 00 40 mov %eax,0x4000a4c8
- };
-400032a4: c7 05 c0 a4 00 40 b0 movl $0x400032b0,0x4000a4c0
-400032ab: 32 00 40
-
-400032ae: c9 leave
-400032af: c3 ret
-
-400032b0 <sync_rpc_response_handler>:
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
-400032b0: 55 push %ebp
-400032b1: 89 e5 mov %esp,%ebp
-400032b3: 83 ec 18 sub $0x18,%esp
- // Ein ATA-Geraet
- dev->atapi = 0;
-
-400032b6: e8 dd fe ff ff call 40003198 <p>
- // TODO: Informationen verarbeiten
-400032bb: a1 c8 a4 00 40 mov 0x4000a4c8,%eax
-400032c0: 85 c0 test %eax,%eax
-400032c2: 75 05 jne 400032c9 <sync_rpc_response_handler+0x19>
-
-400032c4: e8 cb ff ff ff call 40003294 <init_sync_messages>
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-400032c9: 83 ec 0c sub $0xc,%esp
-400032cc: 6a 10 push $0x10
-400032ce: e8 05 50 00 00 call 400082d8 <malloc>
-400032d3: 83 c4 10 add $0x10,%esp
-400032d6: 89 45 f8 mov %eax,-0x8(%ebp)
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-400032d9: 8b 55 f8 mov -0x8(%ebp),%edx
-400032dc: 8b 45 08 mov 0x8(%ebp),%eax
-400032df: 89 02 mov %eax,(%edx)
- */
-400032e1: 8b 55 f8 mov -0x8(%ebp),%edx
-400032e4: 8b 45 0c mov 0xc(%ebp),%eax
-400032e7: 89 42 04 mov %eax,0x4(%edx)
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-400032ea: 8b 55 f8 mov -0x8(%ebp),%edx
-400032ed: 8b 45 10 mov 0x10(%ebp),%eax
-400032f0: 89 42 08 mov %eax,0x8(%edx)
-{
- int result = 1;
-400032f3: 83 ec 0c sub $0xc,%esp
-400032f6: ff 75 10 pushl 0x10(%ebp)
-400032f9: e8 da 4f 00 00 call 400082d8 <malloc>
-400032fe: 83 c4 10 add $0x10,%esp
-40003301: 89 45 fc mov %eax,-0x4(%ebp)
- struct ata_request request;
-40003304: 83 ec 04 sub $0x4,%esp
-40003307: ff 75 10 pushl 0x10(%ebp)
-4000330a: ff 75 14 pushl 0x14(%ebp)
-4000330d: ff 75 fc pushl -0x4(%ebp)
-40003310: e8 53 5c 00 00 call 40008f68 <memcpy>
-40003315: 83 c4 10 add $0x10,%esp
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-40003318: 8b 55 f8 mov -0x8(%ebp),%edx
-4000331b: 8b 45 fc mov -0x4(%ebp),%eax
-4000331e: 89 42 0c mov %eax,0xc(%edx)
- // muss unter Umstaenden mehrmals gelesen werden.
-40003321: a1 c8 a4 00 40 mov 0x4000a4c8,%eax
-40003326: 83 ec 08 sub $0x8,%esp
-40003329: ff 75 f8 pushl -0x8(%ebp)
-4000332c: 50 push %eax
-4000332d: e8 9a 49 00 00 call 40007ccc <list_push>
-40003332: 83 c4 10 add $0x10,%esp
- uint16_t current_count;
-40003335: e8 6a fe ff ff call 400031a4 <v>
- void* current_buffer = buffer;
-4000333a: c9 leave
-4000333b: c3 ret
-
-4000333c <sync_rpc_has_response>:
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
- }
-
-4000333c: 55 push %ebp
-4000333d: 89 e5 mov %esp,%ebp
-4000333f: 83 ec 18 sub $0x18,%esp
- // Request vorbereiten
-40003342: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- request.dev = dev;
-40003349: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
-40003350: e8 43 fe ff ff call 40003198 <p>
- request.flags.direction = READ;
-40003355: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- // FIXME
-4000335c: eb 2c jmp 4000338a <sync_rpc_has_response+0x4e>
- request.flags.poll = 1;
- request.flags.ata = 0;
-4000335e: 8b 45 fc mov -0x4(%ebp),%eax
-40003361: 8b 40 04 mov 0x4(%eax),%eax
-40003364: 3b 45 0c cmp 0xc(%ebp),%eax
-40003367: 75 1e jne 40003387 <sync_rpc_has_response+0x4b>
- request.flags.lba = 1;
-40003369: a1 c8 a4 00 40 mov 0x4000a4c8,%eax
-4000336e: 83 ec 08 sub $0x8,%esp
-40003371: ff 75 f8 pushl -0x8(%ebp)
-40003374: 50 push %eax
-40003375: e8 ff 4b 00 00 call 40007f79 <list_remove>
-4000337a: 83 c4 10 add $0x10,%esp
-
-4000337d: 8b 45 fc mov -0x4(%ebp),%eax
-40003380: 8b 00 mov (%eax),%eax
-40003382: 3b 45 08 cmp 0x8(%ebp),%eax
-40003385: 74 20 je 400033a7 <sync_rpc_has_response+0x6b>
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40003387: ff 45 f8 incl -0x8(%ebp)
- // Request vorbereiten
- request.dev = dev;
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
-4000338a: a1 c8 a4 00 40 mov 0x4000a4c8,%eax
-4000338f: 83 ec 08 sub $0x8,%esp
-40003392: ff 75 f8 pushl -0x8(%ebp)
-40003395: 50 push %eax
-40003396: e8 f2 4a 00 00 call 40007e8d <list_get_element_at>
-4000339b: 83 c4 10 add $0x10,%esp
-4000339e: 89 45 fc mov %eax,-0x4(%ebp)
-400033a1: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400033a5: 75 b7 jne 4000335e <sync_rpc_has_response+0x22>
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-400033a7: e8 f8 fd ff ff call 400031a4 <v>
- request.registers.ata.lba = lba;
-
-400033ac: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400033b0: 74 1d je 400033cf <sync_rpc_has_response+0x93>
-400033b2: 8b 45 fc mov -0x4(%ebp),%eax
-400033b5: 8b 40 04 mov 0x4(%eax),%eax
-400033b8: 3b 45 0c cmp 0xc(%ebp),%eax
-400033bb: 75 12 jne 400033cf <sync_rpc_has_response+0x93>
-400033bd: 8b 45 fc mov -0x4(%ebp),%eax
-400033c0: 8b 00 mov (%eax),%eax
-400033c2: 3b 45 08 cmp 0x8(%ebp),%eax
-400033c5: 75 08 jne 400033cf <sync_rpc_has_response+0x93>
- request.block_count = current_count;
-400033c7: 8b 45 fc mov -0x4(%ebp),%eax
-400033ca: 89 45 ec mov %eax,-0x14(%ebp)
-400033cd: eb 07 jmp 400033d6 <sync_rpc_has_response+0x9a>
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
-400033cf: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400033d6: 8b 45 ec mov -0x14(%ebp),%eax
- request.buffer = current_buffer;
-
-400033d9: c9 leave
-400033da: c3 ret
-
-400033db <sync_rpc>:
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
-400033db: 55 push %ebp
-400033dc: 89 e5 mov %esp,%ebp
-400033de: 83 ec 18 sub $0x18,%esp
-400033e1: 89 e0 mov %esp,%eax
-400033e3: 89 45 ec mov %eax,-0x14(%ebp)
- }
-400033e6: e8 ad fd ff ff call 40003198 <p>
-
- return result;
-400033eb: a1 cc a4 00 40 mov 0x4000a4cc,%eax
-400033f0: 89 45 f8 mov %eax,-0x8(%ebp)
-400033f3: 40 inc %eax
-400033f4: a3 cc a4 00 40 mov %eax,0x4000a4cc
-400033f9: a1 c8 a4 00 40 mov 0x4000a4c8,%eax
-400033fe: 85 c0 test %eax,%eax
-40003400: 75 05 jne 40003407 <sync_rpc+0x2c>
-40003402: e8 8d fe ff ff call 40003294 <init_sync_messages>
-40003407: 8b 45 10 mov 0x10(%ebp),%eax
-4000340a: 83 c0 08 add $0x8,%eax
-4000340d: 83 c0 0f add $0xf,%eax
-40003410: 83 c0 0f add $0xf,%eax
-40003413: c1 e8 04 shr $0x4,%eax
-40003416: c1 e0 04 shl $0x4,%eax
-40003419: 29 c4 sub %eax,%esp
-4000341b: 89 65 e8 mov %esp,-0x18(%ebp)
-4000341e: 8b 45 e8 mov -0x18(%ebp),%eax
-40003421: 83 c0 0f add $0xf,%eax
-40003424: c1 e8 04 shr $0x4,%eax
-40003427: c1 e0 04 shl $0x4,%eax
-4000342a: 89 45 e8 mov %eax,-0x18(%ebp)
-4000342d: 8b 45 e8 mov -0x18(%ebp),%eax
-40003430: 89 45 f4 mov %eax,-0xc(%ebp)
-40003433: 8b 45 f4 mov -0xc(%ebp),%eax
-40003436: 83 ec 04 sub $0x4,%esp
-40003439: 6a 08 push $0x8
-4000343b: ff 75 0c pushl 0xc(%ebp)
-4000343e: 50 push %eax
-4000343f: e8 c4 5e 00 00 call 40009308 <strncpy>
-40003444: 83 c4 10 add $0x10,%esp
-40003447: 8b 45 f4 mov -0xc(%ebp),%eax
-4000344a: 83 c0 08 add $0x8,%eax
-4000344d: 83 ec 04 sub $0x4,%esp
-40003450: ff 75 10 pushl 0x10(%ebp)
-40003453: ff 75 14 pushl 0x14(%ebp)
-40003456: 50 push %eax
-40003457: e8 0c 5b 00 00 call 40008f68 <memcpy>
-4000345c: 83 c4 10 add $0x10,%esp
-4000345f: e8 40 fd ff ff call 400031a4 <v>
-40003464: 8b 45 f4 mov -0xc(%ebp),%eax
-40003467: 8b 55 10 mov 0x10(%ebp),%edx
-4000346a: 83 c2 08 add $0x8,%edx
-4000346d: 83 ec 0c sub $0xc,%esp
-40003470: 50 push %eax
-40003471: 52 push %edx
-40003472: ff 75 f8 pushl -0x8(%ebp)
-40003475: 68 00 02 00 00 push $0x200
-4000347a: ff 75 08 pushl 0x8(%ebp)
-4000347d: e8 b0 fd ff ff call 40003232 <send_message>
-40003482: 83 c4 20 add $0x20,%esp
-40003485: e8 0e fd ff ff call 40003198 <p>
-4000348a: eb 0a jmp 40003496 <sync_rpc+0xbb>
-4000348c: e8 f7 03 00 00 call 40003888 <v_and_wait_for_rpc>
-40003491: e8 02 fd ff ff call 40003198 <p>
-40003496: 83 ec 08 sub $0x8,%esp
-40003499: ff 75 f8 pushl -0x8(%ebp)
-4000349c: ff 75 08 pushl 0x8(%ebp)
-4000349f: e8 98 fe ff ff call 4000333c <sync_rpc_has_response>
-400034a4: 83 c4 10 add $0x10,%esp
-400034a7: 89 45 fc mov %eax,-0x4(%ebp)
-400034aa: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400034ae: 74 dc je 4000348c <sync_rpc+0xb1>
-400034b0: e8 ef fc ff ff call 400031a4 <v>
-400034b5: 8b 45 fc mov -0x4(%ebp),%eax
-400034b8: 8b 65 ec mov -0x14(%ebp),%esp
-400034bb: c9 leave
-400034bc: c3 ret
-
-400034bd <rpc_get_dword>:
-400034bd: 55 push %ebp
-400034be: 89 e5 mov %esp,%ebp
-400034c0: 83 ec 18 sub $0x18,%esp
-400034c3: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-400034ca: ff 75 14 pushl 0x14(%ebp)
-400034cd: ff 75 10 pushl 0x10(%ebp)
-400034d0: ff 75 0c pushl 0xc(%ebp)
-400034d3: ff 75 08 pushl 0x8(%ebp)
-400034d6: e8 00 ff ff ff call 400033db <sync_rpc>
-400034db: 83 c4 10 add $0x10,%esp
-400034de: 89 45 fc mov %eax,-0x4(%ebp)
-400034e1: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400034e5: 74 16 je 400034fd <rpc_get_dword+0x40>
-400034e7: 8b 45 fc mov -0x4(%ebp),%eax
-400034ea: 8b 40 08 mov 0x8(%eax),%eax
-400034ed: 83 f8 03 cmp $0x3,%eax
-400034f0: 76 0b jbe 400034fd <rpc_get_dword+0x40>
-400034f2: 8b 45 fc mov -0x4(%ebp),%eax
-400034f5: 8b 40 0c mov 0xc(%eax),%eax
-400034f8: 8b 00 mov (%eax),%eax
-400034fa: 89 45 f8 mov %eax,-0x8(%ebp)
-400034fd: 8b 45 fc mov -0x4(%ebp),%eax
-40003500: 8b 40 0c mov 0xc(%eax),%eax
-40003503: 83 ec 0c sub $0xc,%esp
-40003506: 50 push %eax
-40003507: e8 a3 54 00 00 call 400089af <free>
-4000350c: 83 c4 10 add $0x10,%esp
-4000350f: 83 ec 0c sub $0xc,%esp
-40003512: ff 75 fc pushl -0x4(%ebp)
-40003515: e8 95 54 00 00 call 400089af <free>
-4000351a: 83 c4 10 add $0x10,%esp
-4000351d: 8b 45 f8 mov -0x8(%ebp),%eax
-40003520: c9 leave
-40003521: c3 ret
-
-40003522 <rpc_get_int>:
-40003522: 55 push %ebp
-40003523: 89 e5 mov %esp,%ebp
-40003525: 83 ec 18 sub $0x18,%esp
-40003528: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-4000352f: ff 75 14 pushl 0x14(%ebp)
-40003532: ff 75 10 pushl 0x10(%ebp)
-40003535: ff 75 0c pushl 0xc(%ebp)
-40003538: ff 75 08 pushl 0x8(%ebp)
-4000353b: e8 9b fe ff ff call 400033db <sync_rpc>
-40003540: 83 c4 10 add $0x10,%esp
-40003543: 89 45 fc mov %eax,-0x4(%ebp)
-40003546: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000354a: 74 16 je 40003562 <rpc_get_int+0x40>
-4000354c: 8b 45 fc mov -0x4(%ebp),%eax
-4000354f: 8b 40 08 mov 0x8(%eax),%eax
-40003552: 83 f8 03 cmp $0x3,%eax
-40003555: 76 0b jbe 40003562 <rpc_get_int+0x40>
-40003557: 8b 45 fc mov -0x4(%ebp),%eax
-4000355a: 8b 40 0c mov 0xc(%eax),%eax
-4000355d: 8b 00 mov (%eax),%eax
-4000355f: 89 45 f8 mov %eax,-0x8(%ebp)
-40003562: 8b 45 fc mov -0x4(%ebp),%eax
-40003565: 8b 40 0c mov 0xc(%eax),%eax
-40003568: 83 ec 0c sub $0xc,%esp
-4000356b: 50 push %eax
-4000356c: e8 3e 54 00 00 call 400089af <free>
-40003571: 83 c4 10 add $0x10,%esp
-40003574: 83 ec 0c sub $0xc,%esp
-40003577: ff 75 fc pushl -0x4(%ebp)
-4000357a: e8 30 54 00 00 call 400089af <free>
-4000357f: 83 c4 10 add $0x10,%esp
-40003582: 8b 45 f8 mov -0x8(%ebp),%eax
-40003585: c9 leave
-40003586: c3 ret
-
-40003587 <rpc_get_string>:
-40003587: 55 push %ebp
-40003588: 89 e5 mov %esp,%ebp
-4000358a: 83 ec 18 sub $0x18,%esp
-4000358d: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40003594: ff 75 14 pushl 0x14(%ebp)
-40003597: ff 75 10 pushl 0x10(%ebp)
-4000359a: ff 75 0c pushl 0xc(%ebp)
-4000359d: ff 75 08 pushl 0x8(%ebp)
-400035a0: e8 36 fe ff ff call 400033db <sync_rpc>
-400035a5: 83 c4 10 add $0x10,%esp
-400035a8: 89 45 f8 mov %eax,-0x8(%ebp)
-400035ab: 8b 45 f8 mov -0x8(%ebp),%eax
-400035ae: 8b 50 08 mov 0x8(%eax),%edx
-400035b1: 8b 45 f8 mov -0x8(%ebp),%eax
-400035b4: 8b 40 0c mov 0xc(%eax),%eax
-400035b7: 83 ec 08 sub $0x8,%esp
-400035ba: 52 push %edx
-400035bb: 50 push %eax
-400035bc: e8 2b 44 00 00 call 400079ec <strnlen>
-400035c1: 83 c4 10 add $0x10,%esp
-400035c4: 89 45 fc mov %eax,-0x4(%ebp)
-400035c7: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400035cb: 74 3b je 40003608 <rpc_get_string+0x81>
-400035cd: 8b 45 f8 mov -0x8(%ebp),%eax
-400035d0: 8b 40 08 mov 0x8(%eax),%eax
-400035d3: 3b 45 fc cmp -0x4(%ebp),%eax
-400035d6: 76 30 jbe 40003608 <rpc_get_string+0x81>
-400035d8: 8b 45 fc mov -0x4(%ebp),%eax
-400035db: 40 inc %eax
-400035dc: 83 ec 0c sub $0xc,%esp
-400035df: 50 push %eax
-400035e0: e8 f3 4c 00 00 call 400082d8 <malloc>
-400035e5: 83 c4 10 add $0x10,%esp
-400035e8: 89 45 f4 mov %eax,-0xc(%ebp)
-400035eb: 83 ec 04 sub $0x4,%esp
-400035ee: ff 75 fc pushl -0x4(%ebp)
-400035f1: ff 75 14 pushl 0x14(%ebp)
-400035f4: ff 75 f4 pushl -0xc(%ebp)
-400035f7: e8 0c 5d 00 00 call 40009308 <strncpy>
-400035fc: 83 c4 10 add $0x10,%esp
-400035ff: 8b 45 fc mov -0x4(%ebp),%eax
-40003602: 03 45 f4 add -0xc(%ebp),%eax
-40003605: c6 00 00 movb $0x0,(%eax)
-40003608: 8b 45 f8 mov -0x8(%ebp),%eax
-4000360b: 8b 40 0c mov 0xc(%eax),%eax
-4000360e: 83 ec 0c sub $0xc,%esp
-40003611: 50 push %eax
-40003612: e8 98 53 00 00 call 400089af <free>
-40003617: 83 c4 10 add $0x10,%esp
-4000361a: 83 ec 0c sub $0xc,%esp
-4000361d: ff 75 f8 pushl -0x8(%ebp)
-40003620: e8 8a 53 00 00 call 400089af <free>
-40003625: 83 c4 10 add $0x10,%esp
-40003628: 8b 45 f4 mov -0xc(%ebp),%eax
-4000362b: c9 leave
-4000362c: c3 ret
-
-4000362d <rpc_get_response>:
-4000362d: 55 push %ebp
-4000362e: 89 e5 mov %esp,%ebp
-40003630: 83 ec 18 sub $0x18,%esp
-40003633: ff 75 14 pushl 0x14(%ebp)
-40003636: ff 75 10 pushl 0x10(%ebp)
-40003639: ff 75 0c pushl 0xc(%ebp)
-4000363c: ff 75 08 pushl 0x8(%ebp)
-4000363f: e8 97 fd ff ff call 400033db <sync_rpc>
-40003644: 83 c4 10 add $0x10,%esp
-40003647: 89 45 fc mov %eax,-0x4(%ebp)
-4000364a: 8b 45 fc mov -0x4(%ebp),%eax
-4000364d: c9 leave
-4000364e: c3 ret
-
-4000364f <rpc_send_response>:
-4000364f: 55 push %ebp
-40003650: 89 e5 mov %esp,%ebp
-40003652: 83 ec 08 sub $0x8,%esp
-40003655: 83 ec 0c sub $0xc,%esp
-40003658: ff 75 14 pushl 0x14(%ebp)
-4000365b: ff 75 10 pushl 0x10(%ebp)
-4000365e: ff 75 0c pushl 0xc(%ebp)
-40003661: 68 01 02 00 00 push $0x201
-40003666: ff 75 08 pushl 0x8(%ebp)
-40003669: e8 c4 fb ff ff call 40003232 <send_message>
-4000366e: 83 c4 20 add $0x20,%esp
-40003671: c9 leave
-40003672: c3 ret
-
-40003673 <rpc_send_dword_response>:
-40003673: 55 push %ebp
-40003674: 89 e5 mov %esp,%ebp
-40003676: 83 ec 08 sub $0x8,%esp
-40003679: 8d 45 10 lea 0x10(%ebp),%eax
-4000367c: 83 ec 0c sub $0xc,%esp
-4000367f: 50 push %eax
-40003680: 6a 04 push $0x4
-40003682: ff 75 0c pushl 0xc(%ebp)
-40003685: 68 01 02 00 00 push $0x201
-4000368a: ff 75 08 pushl 0x8(%ebp)
-4000368d: e8 a0 fb ff ff call 40003232 <send_message>
-40003692: 83 c4 20 add $0x20,%esp
-40003695: c9 leave
-40003696: c3 ret
-
-40003697 <rpc_send_int_response>:
-40003697: 55 push %ebp
-40003698: 89 e5 mov %esp,%ebp
-4000369a: 83 ec 08 sub $0x8,%esp
-4000369d: 8d 45 10 lea 0x10(%ebp),%eax
-400036a0: 83 ec 0c sub $0xc,%esp
-400036a3: 50 push %eax
-400036a4: 6a 04 push $0x4
-400036a6: ff 75 0c pushl 0xc(%ebp)
-400036a9: 68 01 02 00 00 push $0x201
-400036ae: ff 75 08 pushl 0x8(%ebp)
-400036b1: e8 7c fb ff ff call 40003232 <send_message>
-400036b6: 83 c4 20 add $0x20,%esp
-400036b9: c9 leave
-400036ba: c3 ret
-
-400036bb <rpc_send_string_response>:
-400036bb: 55 push %ebp
-400036bc: 89 e5 mov %esp,%ebp
-400036be: 83 ec 08 sub $0x8,%esp
-400036c1: 83 ec 0c sub $0xc,%esp
-400036c4: ff 75 10 pushl 0x10(%ebp)
-400036c7: e8 a8 5b 00 00 call 40009274 <strlen>
-400036cc: 83 c4 10 add $0x10,%esp
-400036cf: 83 ec 0c sub $0xc,%esp
-400036d2: ff 75 10 pushl 0x10(%ebp)
-400036d5: 50 push %eax
-400036d6: ff 75 0c pushl 0xc(%ebp)
-400036d9: 68 01 02 00 00 push $0x201
-400036de: ff 75 08 pushl 0x8(%ebp)
-400036e1: e8 4c fb ff ff call 40003232 <send_message>
-400036e6: 83 c4 20 add $0x20,%esp
-400036e9: c9 leave
-400036ea: c3 ret
-400036eb: 90 nop
-
-400036ec <timer_register>:
-
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-400036ec: 55 push %ebp
-400036ed: 89 e5 mov %esp,%ebp
-400036ef: 83 ec 18 sub $0x18,%esp
-int ata_drv_identify(struct ata_device* dev)
-{
-400036f2: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-400036f7: 85 c0 test %eax,%eax
-400036f9: 75 0a jne 40003705 <timer_register+0x19>
- uint8_t buffer[ATA_SECTOR_SIZE];
-400036fb: e8 20 45 00 00 call 40007c20 <list_create>
-40003700: a3 d4 a4 00 40 mov %eax,0x4000a4d4
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-40003705: 83 ec 0c sub $0xc,%esp
-40003708: 6a 08 push $0x8
-4000370a: e8 c9 4b 00 00 call 400082d8 <malloc>
-4000370f: 83 c4 10 add $0x10,%esp
-40003712: 89 45 f4 mov %eax,-0xc(%ebp)
-
- .flags.direction = READ,
-40003715: 8b 55 f4 mov -0xc(%ebp),%edx
-40003718: 8b 45 08 mov 0x8(%ebp),%eax
-4000371b: 89 02 mov %eax,(%edx)
- .flags.poll = 1,
-4000371d: 8b 15 d0 a4 00 40 mov 0x4000a4d0,%edx
-40003723: 8b 45 f4 mov -0xc(%ebp),%eax
-40003726: 89 50 04 mov %edx,0x4(%eax)
-40003729: 8d 42 01 lea 0x1(%edx),%eax
-4000372c: a3 d0 a4 00 40 mov %eax,0x4000a4d0
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-40003731: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40003738: eb 13 jmp 4000374d <timer_register+0x61>
- .block_count = 1,
-4000373a: 8b 45 f8 mov -0x8(%ebp),%eax
-4000373d: 8b 50 04 mov 0x4(%eax),%edx
-40003740: 8b 45 f4 mov -0xc(%ebp),%eax
-40003743: 8b 40 04 mov 0x4(%eax),%eax
-40003746: 39 c2 cmp %eax,%edx
-40003748: 77 20 ja 4000376a <timer_register+0x7e>
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-4000374a: ff 45 fc incl -0x4(%ebp)
-4000374d: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-40003752: 83 ec 08 sub $0x8,%esp
-40003755: ff 75 fc pushl -0x4(%ebp)
-40003758: 50 push %eax
-40003759: e8 2f 47 00 00 call 40007e8d <list_get_element_at>
-4000375e: 83 c4 10 add $0x10,%esp
-40003761: 89 45 f8 mov %eax,-0x8(%ebp)
-40003764: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40003768: 75 d0 jne 4000373a <timer_register+0x4e>
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
-4000376a: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-4000376f: 83 ec 04 sub $0x4,%esp
-40003772: ff 75 f4 pushl -0xc(%ebp)
-40003775: ff 75 fc pushl -0x4(%ebp)
-40003778: 50 push %eax
-40003779: e8 43 47 00 00 call 40007ec1 <list_insert>
-4000377e: 83 c4 10 add $0x10,%esp
- };
-
- // Request starten
-40003781: 8b 45 f4 mov -0xc(%ebp),%eax
-40003784: 8b 40 04 mov 0x4(%eax),%eax
-40003787: 83 ec 08 sub $0x8,%esp
-4000378a: ff 75 0c pushl 0xc(%ebp)
-4000378d: 50 push %eax
-4000378e: e8 b5 35 00 00 call 40006d48 <syscall_timer>
-40003793: 83 c4 10 add $0x10,%esp
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40003796: 8b 45 f4 mov -0xc(%ebp),%eax
-40003799: 8b 40 04 mov 0x4(%eax),%eax
- // IDENTIFY PACKET DEVICE probieren.
-4000379c: c9 leave
-4000379d: c3 ret
-
-4000379e <timer_callback>:
- return atapi_drv_identify(dev);
- }
-
-4000379e: 55 push %ebp
-4000379f: 89 e5 mov %esp,%ebp
-400037a1: 83 ec 18 sub $0x18,%esp
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-400037a4: e8 ef f9 ff ff call 40003198 <p>
-
-400037a9: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-400037b0: eb 3e jmp 400037f0 <timer_callback+0x52>
- return 1;
-400037b2: 8b 45 f8 mov -0x8(%ebp),%eax
-400037b5: 8b 40 04 mov 0x4(%eax),%eax
-400037b8: 3b 45 08 cmp 0x8(%ebp),%eax
-400037bb: 75 30 jne 400037ed <timer_callback+0x4f>
-}
-400037bd: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-400037c2: 83 ec 08 sub $0x8,%esp
-400037c5: ff 75 fc pushl -0x4(%ebp)
-400037c8: 50 push %eax
-400037c9: e8 ab 47 00 00 call 40007f79 <list_remove>
-400037ce: 83 c4 10 add $0x10,%esp
-
-400037d1: 8b 45 f8 mov -0x8(%ebp),%eax
-400037d4: 8b 00 mov (%eax),%eax
-400037d6: ff d0 call *%eax
-/**
-400037d8: 83 ec 0c sub $0xc,%esp
-400037db: ff 75 f8 pushl -0x8(%ebp)
-400037de: e8 cc 51 00 00 call 400089af <free>
-400037e3: 83 c4 10 add $0x10,%esp
- * Sektoren von einem ATA-Geraet lesen
-400037e6: e8 b9 f9 ff ff call 400031a4 <v>
- *
-400037eb: eb 25 jmp 40003812 <timer_callback+0x74>
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-400037ed: ff 45 fc incl -0x4(%ebp)
-400037f0: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-400037f5: 83 ec 08 sub $0x8,%esp
-400037f8: ff 75 fc pushl -0x4(%ebp)
-400037fb: 50 push %eax
-400037fc: e8 8c 46 00 00 call 40007e8d <list_get_element_at>
-40003801: 83 c4 10 add $0x10,%esp
-40003804: 89 45 f8 mov %eax,-0x8(%ebp)
-40003807: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-4000380b: 75 a5 jne 400037b2 <timer_callback+0x14>
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-4000380d: e8 92 f9 ff ff call 400031a4 <v>
- *
-40003812: c9 leave
-40003813: c3 ret
-
-40003814 <timer_cancel>:
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-40003814: 55 push %ebp
-40003815: 89 e5 mov %esp,%ebp
-40003817: 83 ec 18 sub $0x18,%esp
- void* buffer)
-{
- int result = 1;
- struct ata_request request;
-4000381a: e8 79 f9 ff ff call 40003198 <p>
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-4000381f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40003826: eb 30 jmp 40003858 <timer_cancel+0x44>
- // muss unter Umstaenden mehrmals gelesen werden.
-40003828: 8b 45 f8 mov -0x8(%ebp),%eax
-4000382b: 8b 40 04 mov 0x4(%eax),%eax
-4000382e: 3b 45 08 cmp 0x8(%ebp),%eax
-40003831: 75 22 jne 40003855 <timer_cancel+0x41>
- uint16_t current_count;
-40003833: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-40003838: 83 ec 08 sub $0x8,%esp
-4000383b: ff 75 fc pushl -0x4(%ebp)
-4000383e: 50 push %eax
-4000383f: e8 35 47 00 00 call 40007f79 <list_remove>
-40003844: 83 c4 10 add $0x10,%esp
- void* current_buffer = buffer;
-40003847: 83 ec 0c sub $0xc,%esp
-4000384a: ff 75 f8 pushl -0x8(%ebp)
-4000384d: e8 5d 51 00 00 call 400089af <free>
-40003852: 83 c4 10 add $0x10,%esp
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-40003855: ff 45 fc incl -0x4(%ebp)
-40003858: a1 d4 a4 00 40 mov 0x4000a4d4,%eax
-4000385d: 83 ec 08 sub $0x8,%esp
-40003860: ff 75 fc pushl -0x4(%ebp)
-40003863: 50 push %eax
-40003864: e8 24 46 00 00 call 40007e8d <list_get_element_at>
-40003869: 83 c4 10 add $0x10,%esp
-4000386c: 89 45 f8 mov %eax,-0x8(%ebp)
-4000386f: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40003873: 75 b3 jne 40003828 <timer_cancel+0x14>
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-40003875: e8 2a f9 ff ff call 400031a4 <v>
- size_t count_left = count;
-4000387a: c9 leave
-4000387b: c3 ret
-
-4000387c <wait_for_rpc>:
-/*
- * Copyright (c) 2007 Kevin Wolf
- *
- * This program is free software. It comes without any warranty, to
-4000387c: 55 push %ebp
-4000387d: 89 e5 mov %esp,%ebp
- * the extent permitted by applicable law. You can redistribute it
-4000387f: b8 11 00 00 00 mov $0x11,%eax
-40003884: cd 30 int $0x30
- * and/or modify it under the terms of the Do What The Fuck You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
- */
-40003886: c9 leave
-40003887: c3 ret
-
-40003888 <v_and_wait_for_rpc>:
-
-#ifndef _CDI_IO_H_
-#define _CDI_IO_H_
-40003888: 55 push %ebp
-40003889: 89 e5 mov %esp,%ebp
-
-4000388b: b8 13 00 00 00 mov $0x13,%eax
-40003890: cd 30 int $0x30
-#include <stdint.h>
-
-static inline uint16_t cdi_inw(uint16_t _port)
-{
-40003892: c9 leave
-40003893: c3 ret
-
-40003894 <lostio_init>:
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
-40003894: 55 push %ebp
-40003895: 89 e5 mov %esp,%ebp
-40003897: 83 ec 08 sub $0x8,%esp
- struct ata_request request = {
- .dev = dev,
-4000389a: e8 81 43 00 00 call 40007c20 <list_create>
-4000389f: a3 20 a8 00 40 mov %eax,0x4000a820
-
-400038a4: c7 05 04 a8 00 40 7c movl $0x4000987c,0x4000a804
-400038ab: 98 00 40
- .flags.direction = READ,
-400038ae: c6 05 00 a8 00 40 01 movb $0x1,0x4000a800
- .flags.poll = 1,
-400038b5: c7 05 1c a8 00 40 00 movl $0x20000,0x4000a81c
-400038bc: 00 02 00
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-400038bf: e8 5c 43 00 00 call 40007c20 <list_create>
-400038c4: a3 e4 a7 00 40 mov %eax,0x4000a7e4
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-400038c9: e8 52 43 00 00 call 40007c20 <list_create>
-400038ce: a3 e0 a7 00 40 mov %eax,0x4000a7e0
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-400038d3: 83 ec 08 sub $0x8,%esp
-400038d6: 68 60 6d 00 40 push $0x40006d60
-400038db: 68 7e 98 00 40 push $0x4000987e
-400038e0: e8 9c f5 ff ff call 40002e81 <register_message_handler>
-400038e5: 83 c4 10 add $0x10,%esp
- .error = 0
-400038e8: 83 ec 08 sub $0x8,%esp
-400038eb: 68 83 6f 00 40 push $0x40006f83
-400038f0: 68 87 98 00 40 push $0x40009887
-400038f5: e8 87 f5 ff ff call 40002e81 <register_message_handler>
-400038fa: 83 c4 10 add $0x10,%esp
- };
-400038fd: 83 ec 08 sub $0x8,%esp
-40003900: 68 d2 6f 00 40 push $0x40006fd2
-40003905: 68 90 98 00 40 push $0x40009890
-4000390a: e8 72 f5 ff ff call 40002e81 <register_message_handler>
-4000390f: 83 c4 10 add $0x10,%esp
-
-40003912: 83 ec 08 sub $0x8,%esp
-40003915: 68 31 71 00 40 push $0x40007131
-4000391a: 68 99 98 00 40 push $0x40009899
-4000391f: e8 5d f5 ff ff call 40002e81 <register_message_handler>
-40003924: 83 c4 10 add $0x10,%esp
- // Request starten
-40003927: 83 ec 08 sub $0x8,%esp
-4000392a: 68 70 72 00 40 push $0x40007270
-4000392f: 68 a2 98 00 40 push $0x400098a2
-40003934: e8 48 f5 ff ff call 40002e81 <register_message_handler>
-40003939: 83 c4 10 add $0x10,%esp
- if (!ata_request(&request)) {
-4000393c: 83 ec 08 sub $0x8,%esp
-4000393f: 68 26 73 00 40 push $0x40007326
-40003944: 68 ab 98 00 40 push $0x400098ab
-40003949: e8 33 f5 ff ff call 40002e81 <register_message_handler>
-4000394e: 83 c4 10 add $0x10,%esp
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40003951: 83 ec 08 sub $0x8,%esp
-40003954: 68 88 73 00 40 push $0x40007388
-40003959: 68 b4 98 00 40 push $0x400098b4
-4000395e: e8 1e f5 ff ff call 40002e81 <register_message_handler>
-40003963: 83 c4 10 add $0x10,%esp
- // IDENTIFY PACKET DEVICE probieren.
-40003966: 83 ec 08 sub $0x8,%esp
-40003969: 68 e6 73 00 40 push $0x400073e6
-4000396e: 68 bd 98 00 40 push $0x400098bd
-40003973: e8 09 f5 ff ff call 40002e81 <register_message_handler>
-40003978: 83 c4 10 add $0x10,%esp
- return atapi_drv_identify(dev);
-4000397b: 83 ec 08 sub $0x8,%esp
-4000397e: 68 14 75 00 40 push $0x40007514
-40003983: 68 c6 98 00 40 push $0x400098c6
-40003988: e8 f4 f4 ff ff call 40002e81 <register_message_handler>
-4000398d: 83 c4 10 add $0x10,%esp
- }
-40003990: c9 leave
-40003991: c3 ret
-
-40003992 <lostio_dispatch>:
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-40003992: 55 push %ebp
-40003993: 89 e5 mov %esp,%ebp
-40003995: 83 ec 08 sub $0x8,%esp
- return 1;
-40003998: e8 5b 32 00 00 call 40006bf8 <lostio_sync_dispatch>
-}
-4000399d: c9 leave
-4000399e: c3 ret
-
-4000399f <get_typehandle>:
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-4000399f: 55 push %ebp
-400039a0: 89 e5 mov %esp,%ebp
-400039a2: 83 ec 18 sub $0x18,%esp
-400039a5: 8b 45 08 mov 0x8(%ebp),%eax
-400039a8: 88 45 ec mov %al,-0x14(%ebp)
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-400039ab: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-{
- int result = 1;
-400039b2: eb 0a jmp 400039be <get_typehandle+0x1f>
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-400039b4: 8b 45 f8 mov -0x8(%ebp),%eax
-400039b7: 8a 00 mov (%eax),%al
-400039b9: 3a 45 ec cmp -0x14(%ebp),%al
-400039bc: 74 21 je 400039df <get_typehandle+0x40>
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
-400039be: 8b 55 fc mov -0x4(%ebp),%edx
-400039c1: ff 45 fc incl -0x4(%ebp)
-400039c4: a1 e0 a7 00 40 mov 0x4000a7e0,%eax
-400039c9: 83 ec 08 sub $0x8,%esp
-400039cc: 52 push %edx
-400039cd: 50 push %eax
-400039ce: e8 ba 44 00 00 call 40007e8d <list_get_element_at>
-400039d3: 83 c4 10 add $0x10,%esp
-400039d6: 89 45 f8 mov %eax,-0x8(%ebp)
-400039d9: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400039dd: 75 d5 jne 400039b4 <get_typehandle+0x15>
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-400039df: 8b 45 f8 mov -0x8(%ebp),%eax
- size_t count_left = count;
-400039e2: c9 leave
-400039e3: c3 ret
-
-400039e4 <lostio_register_typehandle>:
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
- }
-
-400039e4: 55 push %ebp
-400039e5: 89 e5 mov %esp,%ebp
-400039e7: 57 push %edi
-400039e8: 56 push %esi
-400039e9: 83 ec 10 sub $0x10,%esp
- // Request vorbereiten
-400039ec: 8b 45 08 mov 0x8(%ebp),%eax
-400039ef: 8a 00 mov (%eax),%al
-400039f1: 0f b6 c0 movzbl %al,%eax
-400039f4: 83 ec 0c sub $0xc,%esp
-400039f7: 50 push %eax
-400039f8: e8 a2 ff ff ff call 4000399f <get_typehandle>
-400039fd: 83 c4 10 add $0x10,%esp
-40003a00: 89 45 f4 mov %eax,-0xc(%ebp)
- request.dev = dev;
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
- request.flags.poll = 1;
-40003a03: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40003a07: 75 1b jne 40003a24 <lostio_register_typehandle+0x40>
- request.flags.ata = 0;
- request.flags.lba = 1;
-40003a09: a1 e0 a7 00 40 mov 0x4000a7e0,%eax
-40003a0e: 83 ec 08 sub $0x8,%esp
-40003a11: ff 75 08 pushl 0x8(%ebp)
-40003a14: 50 push %eax
-40003a15: e8 b2 42 00 00 call 40007ccc <list_push>
-40003a1a: 83 c4 10 add $0x10,%esp
-40003a1d: a3 e0 a7 00 40 mov %eax,0x4000a7e0
-40003a22: eb 14 jmp 40003a38 <lostio_register_typehandle+0x54>
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40003a24: 8b 45 f4 mov -0xc(%ebp),%eax
-40003a27: 8b 55 08 mov 0x8(%ebp),%edx
-40003a2a: 89 c7 mov %eax,%edi
-40003a2c: 89 d6 mov %edx,%esi
-40003a2e: fc cld
-40003a2f: b8 0a 00 00 00 mov $0xa,%eax
-40003a34: 89 c1 mov %eax,%ecx
-40003a36: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-40003a38: 8d 65 f8 lea -0x8(%ebp),%esp
-40003a3b: 5e pop %esi
-40003a3c: 5f pop %edi
-40003a3d: c9 leave
-40003a3e: c3 ret
-
-40003a3f <get_filehandle>:
-
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-
-40003a3f: 55 push %ebp
-40003a40: 89 e5 mov %esp,%ebp
-40003a42: 83 ec 18 sub $0x18,%esp
- // Request ausfuehren
- if (!ata_request(&request)) {
-40003a45: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- result = 0;
- break;
-40003a4c: eb 0a jmp 40003a58 <get_filehandle+0x19>
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-40003a4e: 8b 45 f8 mov -0x8(%ebp),%eax
-40003a51: 8b 00 mov (%eax),%eax
-40003a53: 3b 45 0c cmp 0xc(%ebp),%eax
-40003a56: 74 21 je 40003a79 <get_filehandle+0x3a>
- // TODO: CHS
-
- // Request ausfuehren
- if (!ata_request(&request)) {
- result = 0;
- break;
-40003a58: 8b 55 fc mov -0x4(%ebp),%edx
-40003a5b: ff 45 fc incl -0x4(%ebp)
-40003a5e: a1 e4 a7 00 40 mov 0x4000a7e4,%eax
-40003a63: 83 ec 08 sub $0x8,%esp
-40003a66: 52 push %edx
-40003a67: 50 push %eax
-40003a68: e8 20 44 00 00 call 40007e8d <list_get_element_at>
-40003a6d: 83 c4 10 add $0x10,%esp
-40003a70: 89 45 f8 mov %eax,-0x8(%ebp)
-40003a73: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40003a77: 75 d5 jne 40003a4e <get_filehandle+0xf>
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-}
-40003a79: 8b 45 f8 mov -0x8(%ebp),%eax
-
-40003a7c: c9 leave
-40003a7d: c3 ret
-40003a7e: 90 nop
-40003a7f: 90 nop
-
-40003a80 <vfstree_dirname>:
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-40003a80: 55 push %ebp
-40003a81: 89 e5 mov %esp,%ebp
-40003a83: 83 ec 18 sub $0x18,%esp
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-40003a86: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- .buffer = buffer,
-
- .error = 0
-40003a8d: 83 ec 0c sub $0xc,%esp
-40003a90: ff 75 08 pushl 0x8(%ebp)
-40003a93: e8 dc 57 00 00 call 40009274 <strlen>
-40003a98: 83 c4 10 add $0x10,%esp
-40003a9b: 48 dec %eax
-40003a9c: 89 45 f4 mov %eax,-0xc(%ebp)
-40003a9f: eb 1a jmp 40003abb <vfstree_dirname+0x3b>
- };
-
-40003aa1: 8b 45 f4 mov -0xc(%ebp),%eax
-40003aa4: 03 45 08 add 0x8(%ebp),%eax
-40003aa7: 8a 00 mov (%eax),%al
-40003aa9: 3c 2f cmp $0x2f,%al
-40003aab: 75 0b jne 40003ab8 <vfstree_dirname+0x38>
- // Request starten
- if (!ata_request(&request)) {
-40003aad: 8b 45 f4 mov -0xc(%ebp),%eax
-40003ab0: 03 45 08 add 0x8(%ebp),%eax
-40003ab3: 89 45 f8 mov %eax,-0x8(%ebp)
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40003ab6: eb 09 jmp 40003ac1 <vfstree_dirname+0x41>
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
-40003ab8: ff 4d f4 decl -0xc(%ebp)
-40003abb: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40003abf: 79 e0 jns 40003aa1 <vfstree_dirname+0x21>
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-40003ac1: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40003ac5: 74 08 je 40003acf <vfstree_dirname+0x4f>
-40003ac7: 8b 45 f8 mov -0x8(%ebp),%eax
-40003aca: 3b 45 08 cmp 0x8(%ebp),%eax
-40003acd: 75 1f jne 40003aee <vfstree_dirname+0x6e>
-
- // TODO: Informationen verarbeiten
-40003acf: 83 ec 0c sub $0xc,%esp
-40003ad2: 6a 02 push $0x2
-40003ad4: e8 ff 47 00 00 call 400082d8 <malloc>
-40003ad9: 83 c4 10 add $0x10,%esp
-40003adc: 89 45 fc mov %eax,-0x4(%ebp)
-
-40003adf: 8b 45 fc mov -0x4(%ebp),%eax
-40003ae2: c6 00 2f movb $0x2f,(%eax)
- return 1;
-40003ae5: 8b 45 fc mov -0x4(%ebp),%eax
-40003ae8: 40 inc %eax
-40003ae9: c6 00 00 movb $0x0,(%eax)
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-40003aec: eb 52 jmp 40003b40 <vfstree_dirname+0xc0>
-
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
-40003aee: 8b 45 f8 mov -0x8(%ebp),%eax
-40003af1: 89 c2 mov %eax,%edx
-40003af3: 8b 45 08 mov 0x8(%ebp),%eax
-40003af6: 89 d1 mov %edx,%ecx
-40003af8: 29 c1 sub %eax,%ecx
-40003afa: 89 c8 mov %ecx,%eax
-40003afc: 40 inc %eax
-40003afd: 83 ec 0c sub $0xc,%esp
-40003b00: 50 push %eax
-40003b01: e8 d2 47 00 00 call 400082d8 <malloc>
-40003b06: 83 c4 10 add $0x10,%esp
-40003b09: 89 45 fc mov %eax,-0x4(%ebp)
- *
-40003b0c: 8b 45 f8 mov -0x8(%ebp),%eax
-40003b0f: 89 c2 mov %eax,%edx
-40003b11: 8b 45 08 mov 0x8(%ebp),%eax
-40003b14: 89 d1 mov %edx,%ecx
-40003b16: 29 c1 sub %eax,%ecx
-40003b18: 89 c8 mov %ecx,%eax
-40003b1a: 83 ec 04 sub $0x4,%esp
-40003b1d: 50 push %eax
-40003b1e: ff 75 08 pushl 0x8(%ebp)
-40003b21: ff 75 fc pushl -0x4(%ebp)
-40003b24: e8 3f 54 00 00 call 40008f68 <memcpy>
-40003b29: 83 c4 10 add $0x10,%esp
- * @param start LBA des Startsektors
-40003b2c: 8b 45 f8 mov -0x8(%ebp),%eax
-40003b2f: 89 c2 mov %eax,%edx
-40003b31: 8b 45 08 mov 0x8(%ebp),%eax
-40003b34: 89 d1 mov %edx,%ecx
-40003b36: 29 c1 sub %eax,%ecx
-40003b38: 89 c8 mov %ecx,%eax
-40003b3a: 03 45 fc add -0x4(%ebp),%eax
-40003b3d: c6 00 00 movb $0x0,(%eax)
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-40003b40: 8b 45 fc mov -0x4(%ebp),%eax
- *
-40003b43: c9 leave
-40003b44: c3 ret
-
-40003b45 <vfstree_basename>:
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
-40003b45: 55 push %ebp
-40003b46: 89 e5 mov %esp,%ebp
-40003b48: 83 ec 18 sub $0x18,%esp
- uint64_t lba = start;
-
-40003b4b: 8b 45 08 mov 0x8(%ebp),%eax
-40003b4e: 89 45 fc mov %eax,-0x4(%ebp)
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
-40003b51: 83 ec 0c sub $0xc,%esp
-40003b54: ff 75 08 pushl 0x8(%ebp)
-40003b57: e8 18 57 00 00 call 40009274 <strlen>
-40003b5c: 83 c4 10 add $0x10,%esp
-40003b5f: 48 dec %eax
-40003b60: 89 45 f8 mov %eax,-0x8(%ebp)
-40003b63: eb 1e jmp 40003b83 <vfstree_basename+0x3e>
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40003b65: 8b 45 f8 mov -0x8(%ebp),%eax
-40003b68: 03 45 08 add 0x8(%ebp),%eax
-40003b6b: 8a 00 mov (%eax),%al
-40003b6d: 3c 2f cmp $0x2f,%al
-40003b6f: 75 0f jne 40003b80 <vfstree_basename+0x3b>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
-40003b71: 8b 55 08 mov 0x8(%ebp),%edx
-40003b74: 42 inc %edx
-40003b75: 8b 45 f8 mov -0x8(%ebp),%eax
-40003b78: 8d 04 02 lea (%edx,%eax,1),%eax
-40003b7b: 89 45 fc mov %eax,-0x4(%ebp)
- current_count = 256;
-40003b7e: eb 09 jmp 40003b89 <vfstree_basename+0x44>
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
-40003b80: ff 4d f8 decl -0x8(%ebp)
-40003b83: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40003b87: 79 dc jns 40003b65 <vfstree_basename+0x20>
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
- }
-
-40003b89: 8b 45 fc mov -0x4(%ebp),%eax
- // Request vorbereiten
-40003b8c: c9 leave
-40003b8d: c3 ret
-
-40003b8e <vfstree_get_node_by_name>:
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
-40003b8e: 55 push %ebp
-40003b8f: 89 e5 mov %esp,%ebp
-40003b91: 83 ec 18 sub $0x18,%esp
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40003b94: 8b 45 0c mov 0xc(%ebp),%eax
-40003b97: 8a 00 mov (%eax),%al
-40003b99: 3c 2f cmp $0x2f,%al
-40003b9b: 75 03 jne 40003ba0 <vfstree_get_node_by_name+0x12>
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-40003b9d: ff 45 0c incl 0xc(%ebp)
- request.registers.ata.lba = lba;
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
-40003ba0: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- request.blocks_done = 0;
- request.buffer = current_buffer;
-40003ba7: eb 21 jmp 40003bca <vfstree_get_node_by_name+0x3c>
-
- request.error = NO_ERROR;
-40003ba9: 8b 45 fc mov -0x4(%ebp),%eax
-40003bac: 8b 40 04 mov 0x4(%eax),%eax
-40003baf: 83 ec 08 sub $0x8,%esp
-40003bb2: 50 push %eax
-40003bb3: ff 75 0c pushl 0xc(%ebp)
-40003bb6: e8 35 56 00 00 call 400091f0 <strcmp>
-40003bbb: 83 c4 10 add $0x10,%esp
-40003bbe: 85 c0 test %eax,%eax
-40003bc0: 75 08 jne 40003bca <vfstree_get_node_by_name+0x3c>
-
- // TODO: LBA48
-40003bc2: 8b 45 fc mov -0x4(%ebp),%eax
-40003bc5: 89 45 ec mov %eax,-0x14(%ebp)
-40003bc8: eb 29 jmp 40003bf3 <vfstree_get_node_by_name+0x65>
- request.registers.ata.lba = lba;
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-40003bca: 8b 55 f8 mov -0x8(%ebp),%edx
-40003bcd: ff 45 f8 incl -0x8(%ebp)
-40003bd0: 8b 45 08 mov 0x8(%ebp),%eax
-40003bd3: 8b 40 20 mov 0x20(%eax),%eax
-40003bd6: 83 ec 08 sub $0x8,%esp
-40003bd9: 52 push %edx
-40003bda: 50 push %eax
-40003bdb: e8 ad 42 00 00 call 40007e8d <list_get_element_at>
-40003be0: 83 c4 10 add $0x10,%esp
-40003be3: 89 45 fc mov %eax,-0x4(%ebp)
-40003be6: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40003bea: 75 bd jne 40003ba9 <vfstree_get_node_by_name+0x1b>
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-
- // Request ausfuehren
-40003bec: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40003bf3: 8b 45 ec mov -0x14(%ebp),%eax
- if (!ata_request(&request)) {
-40003bf6: c9 leave
-40003bf7: c3 ret
-
-40003bf8 <vfstree_get_node_by_path>:
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-40003bf8: 55 push %ebp
-40003bf9: 89 e5 mov %esp,%ebp
-40003bfb: 53 push %ebx
-40003bfc: 83 ec 24 sub $0x24,%esp
-}
-
-40003bff: 8b 45 08 mov 0x8(%ebp),%eax
-40003c02: 8a 00 mov (%eax),%al
-40003c04: 3c 2f cmp $0x2f,%al
-40003c06: 75 03 jne 40003c0b <vfstree_get_node_by_path+0x13>
-40003c08: ff 45 08 incl 0x8(%ebp)
-40003c0b: 8b 45 08 mov 0x8(%ebp),%eax
-40003c0e: 89 45 e8 mov %eax,-0x18(%ebp)
-40003c11: 8b 45 08 mov 0x8(%ebp),%eax
-40003c14: 89 45 ec mov %eax,-0x14(%ebp)
-40003c17: c7 45 f0 00 a8 00 40 movl $0x4000a800,-0x10(%ebp)
-40003c1e: 83 ec 0c sub $0xc,%esp
-40003c21: ff 75 e8 pushl -0x18(%ebp)
-40003c24: e8 4b 56 00 00 call 40009274 <strlen>
-40003c29: 83 c4 10 add $0x10,%esp
-40003c2c: 85 c0 test %eax,%eax
-40003c2e: 75 08 jne 40003c38 <vfstree_get_node_by_path+0x40>
-40003c30: 8b 45 f0 mov -0x10(%ebp),%eax
-40003c33: 89 45 d8 mov %eax,-0x28(%ebp)
-40003c36: eb 7a jmp 40003cb2 <vfstree_get_node_by_path+0xba>
-40003c38: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40003c3f: eb 56 jmp 40003c97 <vfstree_get_node_by_path+0x9f>
-40003c41: 8b 45 ec mov -0x14(%ebp),%eax
-40003c44: 8a 00 mov (%eax),%al
-40003c46: 88 45 fb mov %al,-0x5(%ebp)
-40003c49: 80 7d fb 2f cmpb $0x2f,-0x5(%ebp)
-40003c4d: 74 06 je 40003c55 <vfstree_get_node_by_path+0x5d>
-40003c4f: 80 7d fb 00 cmpb $0x0,-0x5(%ebp)
-40003c53: 75 3c jne 40003c91 <vfstree_get_node_by_path+0x99>
-40003c55: 8b 45 ec mov -0x14(%ebp),%eax
-40003c58: c6 00 00 movb $0x0,(%eax)
-40003c5b: 83 ec 08 sub $0x8,%esp
-40003c5e: ff 75 e8 pushl -0x18(%ebp)
-40003c61: ff 75 f0 pushl -0x10(%ebp)
-40003c64: e8 25 ff ff ff call 40003b8e <vfstree_get_node_by_name>
-40003c69: 83 c4 10 add $0x10,%esp
-40003c6c: 89 45 f0 mov %eax,-0x10(%ebp)
-40003c6f: 8b 55 ec mov -0x14(%ebp),%edx
-40003c72: 8a 45 fb mov -0x5(%ebp),%al
-40003c75: 88 02 mov %al,(%edx)
-40003c77: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40003c7b: 75 09 jne 40003c86 <vfstree_get_node_by_path+0x8e>
-40003c7d: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-40003c84: eb 2c jmp 40003cb2 <vfstree_get_node_by_path+0xba>
-40003c86: ff 45 ec incl -0x14(%ebp)
-40003c89: 8b 45 ec mov -0x14(%ebp),%eax
-40003c8c: 89 45 e8 mov %eax,-0x18(%ebp)
-40003c8f: eb 03 jmp 40003c94 <vfstree_get_node_by_path+0x9c>
-40003c91: ff 45 ec incl -0x14(%ebp)
-40003c94: ff 45 f4 incl -0xc(%ebp)
-40003c97: 8b 5d f4 mov -0xc(%ebp),%ebx
-40003c9a: 83 ec 0c sub $0xc,%esp
-40003c9d: ff 75 08 pushl 0x8(%ebp)
-40003ca0: e8 cf 55 00 00 call 40009274 <strlen>
-40003ca5: 83 c4 10 add $0x10,%esp
-40003ca8: 39 c3 cmp %eax,%ebx
-40003caa: 76 95 jbe 40003c41 <vfstree_get_node_by_path+0x49>
-40003cac: 8b 45 f0 mov -0x10(%ebp),%eax
-40003caf: 89 45 d8 mov %eax,-0x28(%ebp)
-40003cb2: 8b 45 d8 mov -0x28(%ebp),%eax
-40003cb5: 8b 5d fc mov -0x4(%ebp),%ebx
-40003cb8: c9 leave
-40003cb9: c3 ret
-
-40003cba <vfstree_create_child>:
-40003cba: 55 push %ebp
-40003cbb: 89 e5 mov %esp,%ebp
-40003cbd: 83 ec 18 sub $0x18,%esp
-40003cc0: 8b 45 10 mov 0x10(%ebp),%eax
-40003cc3: 88 45 ec mov %al,-0x14(%ebp)
-40003cc6: 83 ec 0c sub $0xc,%esp
-40003cc9: 6a 28 push $0x28
-40003ccb: e8 08 46 00 00 call 400082d8 <malloc>
-40003cd0: 83 c4 10 add $0x10,%esp
-40003cd3: 89 45 fc mov %eax,-0x4(%ebp)
-40003cd6: 8b 45 08 mov 0x8(%ebp),%eax
-40003cd9: 8b 40 20 mov 0x20(%eax),%eax
-40003cdc: 83 ec 08 sub $0x8,%esp
-40003cdf: ff 75 fc pushl -0x4(%ebp)
-40003ce2: 50 push %eax
-40003ce3: e8 e4 3f 00 00 call 40007ccc <list_push>
-40003ce8: 83 c4 10 add $0x10,%esp
-40003ceb: 89 c2 mov %eax,%edx
-40003ced: 8b 45 08 mov 0x8(%ebp),%eax
-40003cf0: 89 50 20 mov %edx,0x20(%eax)
-40003cf3: 8b 45 08 mov 0x8(%ebp),%eax
-40003cf6: 8b 50 0c mov 0xc(%eax),%edx
-40003cf9: 8b 40 08 mov 0x8(%eax),%eax
-40003cfc: 83 c0 01 add $0x1,%eax
-40003cff: 83 d2 00 adc $0x0,%edx
-40003d02: 8b 4d 08 mov 0x8(%ebp),%ecx
-40003d05: 89 41 08 mov %eax,0x8(%ecx)
-40003d08: 89 51 0c mov %edx,0xc(%ecx)
-40003d0b: 8b 55 fc mov -0x4(%ebp),%edx
-40003d0e: 8a 45 ec mov -0x14(%ebp),%al
-40003d11: 88 02 mov %al,(%edx)
-40003d13: 83 ec 0c sub $0xc,%esp
-40003d16: ff 75 0c pushl 0xc(%ebp)
-40003d19: e8 56 55 00 00 call 40009274 <strlen>
-40003d1e: 83 c4 10 add $0x10,%esp
-40003d21: 40 inc %eax
-40003d22: 83 ec 0c sub $0xc,%esp
-40003d25: 50 push %eax
-40003d26: e8 ad 45 00 00 call 400082d8 <malloc>
-40003d2b: 83 c4 10 add $0x10,%esp
-40003d2e: 89 c2 mov %eax,%edx
-40003d30: 8b 45 fc mov -0x4(%ebp),%eax
-40003d33: 89 50 04 mov %edx,0x4(%eax)
-40003d36: 83 ec 0c sub $0xc,%esp
-40003d39: ff 75 0c pushl 0xc(%ebp)
-40003d3c: e8 33 55 00 00 call 40009274 <strlen>
-40003d41: 83 c4 10 add $0x10,%esp
-40003d44: 8d 50 01 lea 0x1(%eax),%edx
-40003d47: 8b 45 fc mov -0x4(%ebp),%eax
-40003d4a: 8b 40 04 mov 0x4(%eax),%eax
-40003d4d: 83 ec 04 sub $0x4,%esp
-40003d50: 52 push %edx
-40003d51: ff 75 0c pushl 0xc(%ebp)
-40003d54: 50 push %eax
-40003d55: e8 0e 52 00 00 call 40008f68 <memcpy>
-40003d5a: 83 c4 10 add $0x10,%esp
-40003d5d: 8b 45 14 mov 0x14(%ebp),%eax
-40003d60: ba 00 00 00 00 mov $0x0,%edx
-40003d65: 8b 4d fc mov -0x4(%ebp),%ecx
-40003d68: 89 41 08 mov %eax,0x8(%ecx)
-40003d6b: 89 51 0c mov %edx,0xc(%ecx)
-40003d6e: 8b 55 fc mov -0x4(%ebp),%edx
-40003d71: 8b 45 18 mov 0x18(%ebp),%eax
-40003d74: 89 42 10 mov %eax,0x10(%edx)
-40003d77: 8b 55 fc mov -0x4(%ebp),%edx
-40003d7a: 8b 45 1c mov 0x1c(%ebp),%eax
-40003d7d: 89 42 1c mov %eax,0x1c(%edx)
-40003d80: a1 48 a0 00 40 mov 0x4000a048,%eax
-40003d85: 8b 15 4c a0 00 40 mov 0x4000a04c,%edx
-40003d8b: 8b 4d fc mov -0x4(%ebp),%ecx
-40003d8e: 89 41 14 mov %eax,0x14(%ecx)
-40003d91: 89 51 18 mov %edx,0x18(%ecx)
-40003d94: 83 c0 01 add $0x1,%eax
-40003d97: 83 d2 00 adc $0x0,%edx
-40003d9a: a3 48 a0 00 40 mov %eax,0x4000a048
-40003d9f: 89 15 4c a0 00 40 mov %edx,0x4000a04c
-40003da5: e8 76 3e 00 00 call 40007c20 <list_create>
-40003daa: 89 c2 mov %eax,%edx
-40003dac: 8b 45 fc mov -0x4(%ebp),%eax
-40003daf: 89 50 20 mov %edx,0x20(%eax)
-40003db2: 8b 55 fc mov -0x4(%ebp),%edx
-40003db5: 8b 45 08 mov 0x8(%ebp),%eax
-40003db8: 89 42 24 mov %eax,0x24(%edx)
-40003dbb: b8 01 00 00 00 mov $0x1,%eax
-40003dc0: c9 leave
-40003dc1: c3 ret
-
-40003dc2 <vfstree_create_node>:
-40003dc2: 55 push %ebp
-40003dc3: 89 e5 mov %esp,%ebp
-40003dc5: 83 ec 18 sub $0x18,%esp
-40003dc8: 8b 45 0c mov 0xc(%ebp),%eax
-40003dcb: 88 45 ec mov %al,-0x14(%ebp)
-40003dce: 83 ec 0c sub $0xc,%esp
-40003dd1: ff 75 08 pushl 0x8(%ebp)
-40003dd4: e8 a7 fc ff ff call 40003a80 <vfstree_dirname>
-40003dd9: 83 c4 10 add $0x10,%esp
-40003ddc: 89 45 f4 mov %eax,-0xc(%ebp)
-40003ddf: 83 ec 0c sub $0xc,%esp
-40003de2: ff 75 08 pushl 0x8(%ebp)
-40003de5: e8 5b fd ff ff call 40003b45 <vfstree_basename>
-40003dea: 83 c4 10 add $0x10,%esp
-40003ded: 89 45 f8 mov %eax,-0x8(%ebp)
-40003df0: 83 ec 0c sub $0xc,%esp
-40003df3: ff 75 f4 pushl -0xc(%ebp)
-40003df6: e8 fd fd ff ff call 40003bf8 <vfstree_get_node_by_path>
-40003dfb: 83 c4 10 add $0x10,%esp
-40003dfe: 89 45 fc mov %eax,-0x4(%ebp)
-40003e01: 83 ec 0c sub $0xc,%esp
-40003e04: ff 75 f4 pushl -0xc(%ebp)
-40003e07: e8 a3 4b 00 00 call 400089af <free>
-40003e0c: 83 c4 10 add $0x10,%esp
-40003e0f: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40003e13: 75 19 jne 40003e2e <vfstree_create_node+0x6c>
-40003e15: 83 ec 0c sub $0xc,%esp
-40003e18: 68 d0 98 00 40 push $0x400098d0
-40003e1d: e8 11 27 00 00 call 40006533 <puts>
-40003e22: 83 c4 10 add $0x10,%esp
-40003e25: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40003e2c: eb 22 jmp 40003e50 <vfstree_create_node+0x8e>
-40003e2e: 0f b6 45 ec movzbl -0x14(%ebp),%eax
-40003e32: 83 ec 08 sub $0x8,%esp
-40003e35: ff 75 18 pushl 0x18(%ebp)
-40003e38: ff 75 14 pushl 0x14(%ebp)
-40003e3b: ff 75 10 pushl 0x10(%ebp)
-40003e3e: 50 push %eax
-40003e3f: ff 75 f8 pushl -0x8(%ebp)
-40003e42: ff 75 fc pushl -0x4(%ebp)
-40003e45: e8 70 fe ff ff call 40003cba <vfstree_create_child>
-40003e4a: 83 c4 20 add $0x20,%esp
-40003e4d: 89 45 e8 mov %eax,-0x18(%ebp)
-40003e50: 8b 45 e8 mov -0x18(%ebp),%eax
-40003e53: c9 leave
-40003e54: c3 ret
-
-40003e55 <vfstree_delete_child>:
-40003e55: 55 push %ebp
-40003e56: 89 e5 mov %esp,%ebp
-40003e58: 83 ec 18 sub $0x18,%esp
-40003e5b: 83 ec 08 sub $0x8,%esp
-40003e5e: ff 75 0c pushl 0xc(%ebp)
-40003e61: ff 75 08 pushl 0x8(%ebp)
-40003e64: e8 25 fd ff ff call 40003b8e <vfstree_get_node_by_name>
-40003e69: 83 c4 10 add $0x10,%esp
-40003e6c: 89 45 f4 mov %eax,-0xc(%ebp)
-40003e6f: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40003e73: 74 06 je 40003e7b <vfstree_delete_child+0x26>
-40003e75: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40003e79: 75 0c jne 40003e87 <vfstree_delete_child+0x32>
-40003e7b: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40003e82: e9 ab 00 00 00 jmp 40003f32 <vfstree_delete_child+0xdd>
-40003e87: e8 0c f3 ff ff call 40003198 <p>
-40003e8c: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40003e93: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40003e9a: eb 03 jmp 40003e9f <vfstree_delete_child+0x4a>
-40003e9c: ff 45 f8 incl -0x8(%ebp)
-40003e9f: 8b 45 08 mov 0x8(%ebp),%eax
-40003ea2: 8b 40 20 mov 0x20(%eax),%eax
-40003ea5: 83 ec 08 sub $0x8,%esp
-40003ea8: ff 75 f8 pushl -0x8(%ebp)
-40003eab: 50 push %eax
-40003eac: e8 dc 3f 00 00 call 40007e8d <list_get_element_at>
-40003eb1: 83 c4 10 add $0x10,%esp
-40003eb4: 89 45 fc mov %eax,-0x4(%ebp)
-40003eb7: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40003ebb: 74 08 je 40003ec5 <vfstree_delete_child+0x70>
-40003ebd: 8b 45 fc mov -0x4(%ebp),%eax
-40003ec0: 3b 45 f4 cmp -0xc(%ebp),%eax
-40003ec3: 75 d7 jne 40003e9c <vfstree_delete_child+0x47>
-40003ec5: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40003ec9: 75 0e jne 40003ed9 <vfstree_delete_child+0x84>
-40003ecb: e8 d4 f2 ff ff call 400031a4 <v>
-40003ed0: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40003ed7: eb 59 jmp 40003f32 <vfstree_delete_child+0xdd>
-40003ed9: 8b 45 08 mov 0x8(%ebp),%eax
-40003edc: 8b 40 20 mov 0x20(%eax),%eax
-40003edf: 83 ec 08 sub $0x8,%esp
-40003ee2: ff 75 f8 pushl -0x8(%ebp)
-40003ee5: 50 push %eax
-40003ee6: e8 8e 40 00 00 call 40007f79 <list_remove>
-40003eeb: 83 c4 10 add $0x10,%esp
-40003eee: e8 b1 f2 ff ff call 400031a4 <v>
-40003ef3: 8b 45 08 mov 0x8(%ebp),%eax
-40003ef6: 8b 50 0c mov 0xc(%eax),%edx
-40003ef9: 8b 40 08 mov 0x8(%eax),%eax
-40003efc: 83 c0 ff add $0xffffffff,%eax
-40003eff: 83 d2 ff adc $0xffffffff,%edx
-40003f02: 8b 4d 08 mov 0x8(%ebp),%ecx
-40003f05: 89 41 08 mov %eax,0x8(%ecx)
-40003f08: 89 51 0c mov %edx,0xc(%ecx)
-40003f0b: 8b 45 fc mov -0x4(%ebp),%eax
-40003f0e: 8b 40 04 mov 0x4(%eax),%eax
-40003f11: 83 ec 0c sub $0xc,%esp
-40003f14: 50 push %eax
-40003f15: e8 95 4a 00 00 call 400089af <free>
-40003f1a: 83 c4 10 add $0x10,%esp
-40003f1d: 83 ec 0c sub $0xc,%esp
-40003f20: ff 75 fc pushl -0x4(%ebp)
-40003f23: e8 87 4a 00 00 call 400089af <free>
-40003f28: 83 c4 10 add $0x10,%esp
-40003f2b: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-40003f32: 8b 45 ec mov -0x14(%ebp),%eax
-40003f35: c9 leave
-40003f36: c3 ret
-
-40003f37 <vfstree_delete_node>:
-40003f37: 55 push %ebp
-40003f38: 89 e5 mov %esp,%ebp
-40003f3a: 83 ec 18 sub $0x18,%esp
-40003f3d: 83 ec 0c sub $0xc,%esp
-40003f40: ff 75 08 pushl 0x8(%ebp)
-40003f43: e8 38 fb ff ff call 40003a80 <vfstree_dirname>
-40003f48: 83 c4 10 add $0x10,%esp
-40003f4b: 89 45 f4 mov %eax,-0xc(%ebp)
-40003f4e: 83 ec 0c sub $0xc,%esp
-40003f51: ff 75 08 pushl 0x8(%ebp)
-40003f54: e8 ec fb ff ff call 40003b45 <vfstree_basename>
-40003f59: 83 c4 10 add $0x10,%esp
-40003f5c: 89 45 f8 mov %eax,-0x8(%ebp)
-40003f5f: 83 ec 0c sub $0xc,%esp
-40003f62: ff 75 f4 pushl -0xc(%ebp)
-40003f65: e8 8e fc ff ff call 40003bf8 <vfstree_get_node_by_path>
-40003f6a: 83 c4 10 add $0x10,%esp
-40003f6d: 89 45 fc mov %eax,-0x4(%ebp)
-40003f70: 83 ec 0c sub $0xc,%esp
-40003f73: ff 75 f4 pushl -0xc(%ebp)
-40003f76: e8 34 4a 00 00 call 400089af <free>
-40003f7b: 83 c4 10 add $0x10,%esp
-40003f7e: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40003f82: 75 09 jne 40003f8d <vfstree_delete_node+0x56>
-40003f84: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40003f8b: eb 14 jmp 40003fa1 <vfstree_delete_node+0x6a>
-40003f8d: 83 ec 08 sub $0x8,%esp
-40003f90: ff 75 f8 pushl -0x8(%ebp)
-40003f93: ff 75 fc pushl -0x4(%ebp)
-40003f96: e8 ba fe ff ff call 40003e55 <vfstree_delete_child>
-40003f9b: 83 c4 10 add $0x10,%esp
-40003f9e: 89 45 ec mov %eax,-0x14(%ebp)
-40003fa1: 8b 45 ec mov -0x14(%ebp),%eax
-40003fa4: c9 leave
-40003fa5: c3 ret
-
-40003fa6 <vfstree_clear_node>:
-40003fa6: 55 push %ebp
-40003fa7: 89 e5 mov %esp,%ebp
-40003fa9: 83 ec 18 sub $0x18,%esp
-40003fac: 8b 45 08 mov 0x8(%ebp),%eax
-40003faf: 8b 50 0c mov 0xc(%eax),%edx
-40003fb2: 8b 40 08 mov 0x8(%eax),%eax
-40003fb5: 09 d0 or %edx,%eax
-40003fb7: 85 c0 test %eax,%eax
-40003fb9: 74 5c je 40004017 <vfstree_clear_node+0x71>
-40003fbb: eb 2e jmp 40003feb <vfstree_clear_node+0x45>
-40003fbd: 83 ec 0c sub $0xc,%esp
-40003fc0: ff 75 fc pushl -0x4(%ebp)
-40003fc3: e8 de ff ff ff call 40003fa6 <vfstree_clear_node>
-40003fc8: 83 c4 10 add $0x10,%esp
-40003fcb: 8b 45 fc mov -0x4(%ebp),%eax
-40003fce: 8b 40 10 mov 0x10(%eax),%eax
-40003fd1: 83 ec 0c sub $0xc,%esp
-40003fd4: 50 push %eax
-40003fd5: e8 d5 49 00 00 call 400089af <free>
-40003fda: 83 c4 10 add $0x10,%esp
-40003fdd: 83 ec 0c sub $0xc,%esp
-40003fe0: ff 75 fc pushl -0x4(%ebp)
-40003fe3: e8 c7 49 00 00 call 400089af <free>
-40003fe8: 83 c4 10 add $0x10,%esp
-40003feb: 8b 45 08 mov 0x8(%ebp),%eax
-40003fee: 8b 40 20 mov 0x20(%eax),%eax
-40003ff1: 83 ec 0c sub $0xc,%esp
-40003ff4: 50 push %eax
-40003ff5: e8 41 3d 00 00 call 40007d3b <list_pop>
-40003ffa: 83 c4 10 add $0x10,%esp
-40003ffd: 89 45 fc mov %eax,-0x4(%ebp)
-40004000: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40004004: 75 b7 jne 40003fbd <vfstree_clear_node+0x17>
-40004006: 8b 45 08 mov 0x8(%ebp),%eax
-40004009: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
-40004010: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
-40004017: c9 leave
-40004018: c3 ret
-40004019: 90 nop
-4000401a: 90 nop
-4000401b: 90 nop
-
-4000401c <init_signals>:
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
-4000401c: 55 push %ebp
-4000401d: 89 e5 mov %esp,%ebp
-4000401f: 83 ec 10 sub $0x10,%esp
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-40004022: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40004029: eb 11 jmp 4000403c <init_signals+0x20>
- // Request vorbereiten
-4000402b: 8b 45 fc mov -0x4(%ebp),%eax
-4000402e: c7 04 85 00 a5 00 40 movl $0x400040e5,0x4000a500(,%eax,4)
-40004035: e5 40 00 40
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-40004039: ff 45 fc incl -0x4(%ebp)
-4000403c: 83 7d fc 3f cmpl $0x3f,-0x4(%ebp)
-40004040: 7e e9 jle 4000402b <init_signals+0xf>
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
-40004042: c7 05 e0 a4 00 40 01 movl $0x1,0x4000a4e0
-40004049: 00 00 00
- .flags.direction = READ,
-4000404c: c9 leave
-4000404d: c3 ret
-
-4000404e <raise>:
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-4000404e: 55 push %ebp
-4000404f: 89 e5 mov %esp,%ebp
-40004051: 83 ec 18 sub $0x18,%esp
- .error = 0
- };
-40004054: a1 e0 a4 00 40 mov 0x4000a4e0,%eax
-40004059: 85 c0 test %eax,%eax
-4000405b: 75 05 jne 40004062 <raise+0x14>
-
-4000405d: e8 ba ff ff ff call 4000401c <init_signals>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40004062: 83 7d 08 3f cmpl $0x3f,0x8(%ebp)
-40004066: 7e 09 jle 40004071 <raise+0x23>
- }
-40004068: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000406f: eb 28 jmp 40004099 <raise+0x4b>
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-40004071: 8b 45 08 mov 0x8(%ebp),%eax
-40004074: 8b 04 85 00 a5 00 40 mov 0x4000a500(,%eax,4),%eax
-4000407b: 89 45 fc mov %eax,-0x4(%ebp)
-
-4000407e: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40004082: 74 0e je 40004092 <raise+0x44>
- // TODO: Informationen verarbeiten
-40004084: 83 ec 0c sub $0xc,%esp
-40004087: ff 75 08 pushl 0x8(%ebp)
-4000408a: 8b 45 fc mov -0x4(%ebp),%eax
-4000408d: ff d0 call *%eax
-4000408f: 83 c4 10 add $0x10,%esp
-
- return 1;
-40004092: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40004099: 8b 45 ec mov -0x14(%ebp),%eax
-}
-4000409c: c9 leave
-4000409d: c3 ret
-
-4000409e <kill>:
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-4000409e: 55 push %ebp
-4000409f: 89 e5 mov %esp,%ebp
-400040a1: 83 ec 08 sub $0x8,%esp
- void* buffer)
-{
-400040a4: 8b 45 0c mov 0xc(%ebp),%eax
-400040a7: 05 00 01 00 00 add $0x100,%eax
-400040ac: 3d ff 01 00 00 cmp $0x1ff,%eax
-400040b1: 7e 09 jle 400040bc <kill+0x1e>
- int result = 1;
-400040b3: c7 45 fc ff ff ff ff movl $0xffffffff,-0x4(%ebp)
-400040ba: eb 24 jmp 400040e0 <kill+0x42>
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-400040bc: 8b 45 0c mov 0xc(%ebp),%eax
-400040bf: 05 00 01 00 00 add $0x100,%eax
-400040c4: 83 ec 0c sub $0xc,%esp
-400040c7: 6a 00 push $0x0
-400040c9: 6a 00 push $0x0
-400040cb: 6a 00 push $0x0
-400040cd: 50 push %eax
-400040ce: ff 75 08 pushl 0x8(%ebp)
-400040d1: e8 5c f1 ff ff call 40003232 <send_message>
-400040d6: 83 c4 20 add $0x20,%esp
- uint16_t current_count;
-400040d9: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-400040e0: 8b 45 fc mov -0x4(%ebp),%eax
- void* current_buffer = buffer;
-400040e3: c9 leave
-400040e4: c3 ret
-
-400040e5 <_signal_default_handler>:
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-400040e5: 55 push %ebp
-400040e6: 89 e5 mov %esp,%ebp
-400040e8: 83 ec 08 sub $0x8,%esp
- if (count_left > 256) {
-400040eb: 8b 45 08 mov 0x8(%ebp),%eax
-400040ee: 48 dec %eax
-400040ef: 83 f8 0e cmp $0xe,%eax
-400040f2: 77 0d ja 40004101 <_signal_default_handler+0x1c>
- request.flags.poll = 1;
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
-400040f4: 83 ec 0c sub $0xc,%esp
-400040f7: 6a 01 push $0x1
-400040f9: e8 bd 03 00 00 call 400044bb <_exit>
-400040fe: 83 c4 10 add $0x10,%esp
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-40004101: c9 leave
-40004102: c3 ret
-
-40004103 <signal>:
- request.buffer = current_buffer;
-
- request.error = NO_ERROR;
-
- // TODO: LBA48
- // TODO: CHS
-40004103: 55 push %ebp
-40004104: 89 e5 mov %esp,%ebp
-40004106: 83 ec 14 sub $0x14,%esp
-
- // Request ausfuehren
-40004109: a1 e0 a4 00 40 mov 0x4000a4e0,%eax
-4000410e: 85 c0 test %eax,%eax
-40004110: 75 05 jne 40004117 <signal+0x14>
- if (!ata_request(&request)) {
-40004112: e8 05 ff ff ff call 4000401c <init_signals>
- result = 0;
- break;
- }
-
-40004117: 83 7d 08 3f cmpl $0x3f,0x8(%ebp)
-4000411b: 7f 06 jg 40004123 <signal+0x20>
-4000411d: 83 7d 08 09 cmpl $0x9,0x8(%ebp)
-40004121: 75 09 jne 4000412c <signal+0x29>
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
-40004123: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000412a: eb 20 jmp 4000414c <signal+0x49>
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
- }
-4000412c: 8b 45 08 mov 0x8(%ebp),%eax
-4000412f: 8b 04 85 00 a5 00 40 mov 0x4000a500(,%eax,4),%eax
-40004136: 89 45 fc mov %eax,-0x4(%ebp)
-
- return result;
-}
-40004139: 8b 55 08 mov 0x8(%ebp),%edx
-4000413c: 8b 45 0c mov 0xc(%ebp),%eax
-4000413f: 89 04 95 00 a5 00 40 mov %eax,0x4000a500(,%edx,4)
-
-40004146: 8b 45 fc mov -0x4(%ebp),%eax
-40004149: 89 45 ec mov %eax,-0x14(%ebp)
-4000414c: 8b 45 ec mov -0x14(%ebp),%eax
-4000414f: c9 leave
-40004150: c3 ret
-
-40004151 <sigemptyset>:
-40004151: 55 push %ebp
-40004152: 89 e5 mov %esp,%ebp
-40004154: 83 ec 08 sub $0x8,%esp
-40004157: 8b 45 08 mov 0x8(%ebp),%eax
-4000415a: 83 ec 04 sub $0x4,%esp
-4000415d: 6a 08 push $0x8
-4000415f: 6a 00 push $0x0
-40004161: 50 push %eax
-40004162: e8 ad 4f 00 00 call 40009114 <memset>
-40004167: 83 c4 10 add $0x10,%esp
-4000416a: b8 00 00 00 00 mov $0x0,%eax
-4000416f: c9 leave
-40004170: c3 ret
-
-40004171 <sigfillset>:
-40004171: 55 push %ebp
-40004172: 89 e5 mov %esp,%ebp
-40004174: 83 ec 08 sub $0x8,%esp
-40004177: 8b 45 08 mov 0x8(%ebp),%eax
-4000417a: 83 ec 04 sub $0x4,%esp
-4000417d: 6a 08 push $0x8
-4000417f: 68 ff 00 00 00 push $0xff
-40004184: 50 push %eax
-40004185: e8 8a 4f 00 00 call 40009114 <memset>
-4000418a: 83 c4 10 add $0x10,%esp
-4000418d: b8 00 00 00 00 mov $0x0,%eax
-40004192: c9 leave
-40004193: c3 ret
-
-40004194 <sigaddset>:
-40004194: 55 push %ebp
-40004195: 89 e5 mov %esp,%ebp
-40004197: 83 ec 14 sub $0x14,%esp
-4000419a: 83 7d 0c 3f cmpl $0x3f,0xc(%ebp)
-4000419e: 7e 13 jle 400041b3 <sigaddset+0x1f>
-400041a0: c7 05 28 a8 00 40 02 movl $0x2,0x4000a828
-400041a7: 00 00 00
-400041aa: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp)
-400041b1: eb 61 jmp 40004214 <sigaddset+0x80>
-400041b3: 8b 45 0c mov 0xc(%ebp),%eax
-400041b6: 89 45 f0 mov %eax,-0x10(%ebp)
-400041b9: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400041bd: 79 04 jns 400041c3 <sigaddset+0x2f>
-400041bf: 83 45 f0 07 addl $0x7,-0x10(%ebp)
-400041c3: 8b 45 f0 mov -0x10(%ebp),%eax
-400041c6: c1 f8 03 sar $0x3,%eax
-400041c9: 89 45 f8 mov %eax,-0x8(%ebp)
-400041cc: 89 c2 mov %eax,%edx
-400041ce: 8b 45 08 mov 0x8(%ebp),%eax
-400041d1: 8a 04 10 mov (%eax,%edx,1),%al
-400041d4: 88 45 ff mov %al,-0x1(%ebp)
-400041d7: 8b 45 0c mov 0xc(%ebp),%eax
-400041da: 89 c2 mov %eax,%edx
-400041dc: 81 e2 07 00 00 80 and $0x80000007,%edx
-400041e2: 89 55 ec mov %edx,-0x14(%ebp)
-400041e5: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-400041e9: 79 0a jns 400041f5 <sigaddset+0x61>
-400041eb: ff 4d ec decl -0x14(%ebp)
-400041ee: 83 4d ec f8 orl $0xfffffff8,-0x14(%ebp)
-400041f2: ff 45 ec incl -0x14(%ebp)
-400041f5: 8b 4d ec mov -0x14(%ebp),%ecx
-400041f8: b8 01 00 00 00 mov $0x1,%eax
-400041fd: d3 e0 shl %cl,%eax
-400041ff: 0a 45 ff or -0x1(%ebp),%al
-40004202: 88 c2 mov %al,%dl
-40004204: 8b 45 08 mov 0x8(%ebp),%eax
-40004207: 8b 4d f8 mov -0x8(%ebp),%ecx
-4000420a: 88 14 08 mov %dl,(%eax,%ecx,1)
-4000420d: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-40004214: 8b 45 f4 mov -0xc(%ebp),%eax
-40004217: c9 leave
-40004218: c3 ret
-
-40004219 <sigdelset>:
-40004219: 55 push %ebp
-4000421a: 89 e5 mov %esp,%ebp
-4000421c: 83 ec 14 sub $0x14,%esp
-4000421f: 83 7d 0c 3f cmpl $0x3f,0xc(%ebp)
-40004223: 7e 13 jle 40004238 <sigdelset+0x1f>
-40004225: c7 05 28 a8 00 40 02 movl $0x2,0x4000a828
-4000422c: 00 00 00
-4000422f: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp)
-40004236: eb 63 jmp 4000429b <sigdelset+0x82>
-40004238: 8b 45 0c mov 0xc(%ebp),%eax
-4000423b: 89 45 f0 mov %eax,-0x10(%ebp)
-4000423e: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40004242: 79 04 jns 40004248 <sigdelset+0x2f>
-40004244: 83 45 f0 07 addl $0x7,-0x10(%ebp)
-40004248: 8b 45 f0 mov -0x10(%ebp),%eax
-4000424b: c1 f8 03 sar $0x3,%eax
-4000424e: 89 45 f8 mov %eax,-0x8(%ebp)
-40004251: 89 c2 mov %eax,%edx
-40004253: 8b 45 08 mov 0x8(%ebp),%eax
-40004256: 8a 04 10 mov (%eax,%edx,1),%al
-40004259: 88 45 ff mov %al,-0x1(%ebp)
-4000425c: 8b 45 0c mov 0xc(%ebp),%eax
-4000425f: 89 c2 mov %eax,%edx
-40004261: 81 e2 07 00 00 80 and $0x80000007,%edx
-40004267: 89 55 ec mov %edx,-0x14(%ebp)
-4000426a: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-4000426e: 79 0a jns 4000427a <sigdelset+0x61>
-40004270: ff 4d ec decl -0x14(%ebp)
-40004273: 83 4d ec f8 orl $0xfffffff8,-0x14(%ebp)
-40004277: ff 45 ec incl -0x14(%ebp)
-4000427a: 8b 4d ec mov -0x14(%ebp),%ecx
-4000427d: b8 01 00 00 00 mov $0x1,%eax
-40004282: d3 e0 shl %cl,%eax
-40004284: f7 d0 not %eax
-40004286: 22 45 ff and -0x1(%ebp),%al
-40004289: 88 c2 mov %al,%dl
-4000428b: 8b 45 08 mov 0x8(%ebp),%eax
-4000428e: 8b 4d f8 mov -0x8(%ebp),%ecx
-40004291: 88 14 08 mov %dl,(%eax,%ecx,1)
-40004294: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
-4000429b: 8b 45 f4 mov -0xc(%ebp),%eax
-4000429e: c9 leave
-4000429f: c3 ret
-
-400042a0 <sigismember>:
-400042a0: 55 push %ebp
-400042a1: 89 e5 mov %esp,%ebp
-400042a3: 83 ec 10 sub $0x10,%esp
-400042a6: 83 7d 0c 3f cmpl $0x3f,0xc(%ebp)
-400042aa: 7e 13 jle 400042bf <sigismember+0x1f>
-400042ac: c7 05 28 a8 00 40 02 movl $0x2,0x4000a828
-400042b3: 00 00 00
-400042b6: c7 45 f8 ff ff ff ff movl $0xffffffff,-0x8(%ebp)
-400042bd: eb 52 jmp 40004311 <sigismember+0x71>
-400042bf: 8b 45 0c mov 0xc(%ebp),%eax
-400042c2: 89 45 f4 mov %eax,-0xc(%ebp)
-400042c5: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400042c9: 79 04 jns 400042cf <sigismember+0x2f>
-400042cb: 83 45 f4 07 addl $0x7,-0xc(%ebp)
-400042cf: 8b 45 f4 mov -0xc(%ebp),%eax
-400042d2: c1 f8 03 sar $0x3,%eax
-400042d5: 89 c2 mov %eax,%edx
-400042d7: 8b 45 08 mov 0x8(%ebp),%eax
-400042da: 8a 04 10 mov (%eax,%edx,1),%al
-400042dd: 0f b6 c0 movzbl %al,%eax
-400042e0: 89 45 fc mov %eax,-0x4(%ebp)
-400042e3: 8b 45 0c mov 0xc(%ebp),%eax
-400042e6: 89 c2 mov %eax,%edx
-400042e8: 81 e2 07 00 00 80 and $0x80000007,%edx
-400042ee: 89 55 f0 mov %edx,-0x10(%ebp)
-400042f1: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400042f5: 79 0a jns 40004301 <sigismember+0x61>
-400042f7: ff 4d f0 decl -0x10(%ebp)
-400042fa: 83 4d f0 f8 orl $0xfffffff8,-0x10(%ebp)
-400042fe: ff 45 f0 incl -0x10(%ebp)
-40004301: 8b 4d f0 mov -0x10(%ebp),%ecx
-40004304: 8b 45 fc mov -0x4(%ebp),%eax
-40004307: d3 f8 sar %cl,%eax
-40004309: 89 c2 mov %eax,%edx
-4000430b: 83 e2 01 and $0x1,%edx
-4000430e: 89 55 f8 mov %edx,-0x8(%ebp)
-40004311: 8b 45 f8 mov -0x8(%ebp),%eax
-40004314: c9 leave
-40004315: c3 ret
-40004316: 90 nop
-40004317: 90 nop
-
-40004318 <asprintf_putc>:
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-40004318: 55 push %ebp
-40004319: 89 e5 mov %esp,%ebp
-4000431b: 83 ec 08 sub $0x8,%esp
-4000431e: 8b 45 0c mov 0xc(%ebp),%eax
-40004321: 88 45 fc mov %al,-0x4(%ebp)
-{
-40004324: 8b 45 08 mov 0x8(%ebp),%eax
-40004327: 8b 50 08 mov 0x8(%eax),%edx
-4000432a: 8b 45 08 mov 0x8(%ebp),%eax
-4000432d: 8b 40 04 mov 0x4(%eax),%eax
-40004330: 48 dec %eax
-40004331: 39 c2 cmp %eax,%edx
-40004333: 75 43 jne 40004378 <asprintf_putc+0x60>
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-40004335: 8b 45 08 mov 0x8(%ebp),%eax
-40004338: 8b 40 04 mov 0x4(%eax),%eax
-4000433b: 8d 14 00 lea (%eax,%eax,1),%edx
-4000433e: 8b 45 08 mov 0x8(%ebp),%eax
-40004341: 89 50 04 mov %edx,0x4(%eax)
- // Request vorbereiten
-40004344: 8b 45 08 mov 0x8(%ebp),%eax
-40004347: 8b 40 04 mov 0x4(%eax),%eax
-4000434a: 8d 14 00 lea (%eax,%eax,1),%edx
-4000434d: 8b 45 08 mov 0x8(%ebp),%eax
-40004350: 8b 00 mov (%eax),%eax
-40004352: 83 ec 08 sub $0x8,%esp
-40004355: 52 push %edx
-40004356: 50 push %eax
-40004357: e8 23 49 00 00 call 40008c7f <realloc>
-4000435c: 83 c4 10 add $0x10,%esp
-4000435f: 89 c2 mov %eax,%edx
-40004361: 8b 45 08 mov 0x8(%ebp),%eax
-40004364: 89 10 mov %edx,(%eax)
- struct ata_request request = {
-40004366: 8b 45 08 mov 0x8(%ebp),%eax
-40004369: 8b 00 mov (%eax),%eax
-4000436b: 85 c0 test %eax,%eax
-4000436d: 75 09 jne 40004378 <asprintf_putc+0x60>
- .dev = dev,
-
-4000436f: c7 45 f8 ff ff ff ff movl $0xffffffff,-0x8(%ebp)
-40004376: eb 24 jmp 4000439c <asprintf_putc+0x84>
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
-40004378: 8b 45 08 mov 0x8(%ebp),%eax
-4000437b: 8b 10 mov (%eax),%edx
-4000437d: 8b 45 08 mov 0x8(%ebp),%eax
-40004380: 8b 48 08 mov 0x8(%eax),%ecx
-40004383: 89 c8 mov %ecx,%eax
-40004385: 01 c2 add %eax,%edx
-40004387: 8a 45 fc mov -0x4(%ebp),%al
-4000438a: 88 02 mov %al,(%edx)
-4000438c: 8d 51 01 lea 0x1(%ecx),%edx
-4000438f: 8b 45 08 mov 0x8(%ebp),%eax
-40004392: 89 50 08 mov %edx,0x8(%eax)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40004395: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-4000439c: 8b 45 f8 mov -0x8(%ebp),%eax
- .registers.ata.command = IDENTIFY_DEVICE,
-4000439f: c9 leave
-400043a0: c3 ret
-
-400043a1 <vasprintf>:
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-400043a1: 55 push %ebp
-400043a2: 89 e5 mov %esp,%ebp
-400043a4: 83 ec 28 sub $0x28,%esp
-
- .error = 0
-400043a7: b8 18 43 00 40 mov $0x40004318,%eax
-400043ac: 89 45 e4 mov %eax,-0x1c(%ebp)
-400043af: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-400043b6: 8d 45 f0 lea -0x10(%ebp),%eax
-400043b9: 89 45 ec mov %eax,-0x14(%ebp)
- };
-
- // Request starten
-400043bc: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-400043c0: 75 0c jne 400043ce <vasprintf+0x2d>
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-400043c2: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-400043c9: e9 93 00 00 00 jmp 40004461 <vasprintf+0xc0>
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-400043ce: 83 ec 0c sub $0xc,%esp
-400043d1: 6a 40 push $0x40
-400043d3: e8 00 3f 00 00 call 400082d8 <malloc>
-400043d8: 83 c4 10 add $0x10,%esp
-400043db: 89 45 f0 mov %eax,-0x10(%ebp)
-
-400043de: 8b 45 f0 mov -0x10(%ebp),%eax
-400043e1: 85 c0 test %eax,%eax
-400043e3: 75 09 jne 400043ee <vasprintf+0x4d>
- // Ein ATA-Geraet
- dev->atapi = 0;
-400043e5: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-400043ec: eb 73 jmp 40004461 <vasprintf+0xc0>
-
- // TODO: Informationen verarbeiten
-
-400043ee: c7 45 f4 40 00 00 00 movl $0x40,-0xc(%ebp)
- return 1;
-400043f5: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-}
-
-400043fc: 83 ec 04 sub $0x4,%esp
-400043ff: ff 75 10 pushl 0x10(%ebp)
-40004402: ff 75 0c pushl 0xc(%ebp)
-40004405: 8d 45 e4 lea -0x1c(%ebp),%eax
-40004408: 50 push %eax
-40004409: e8 64 10 00 00 call 40005472 <jvprintf>
-4000440e: 83 c4 10 add $0x10,%esp
-40004411: 89 45 fc mov %eax,-0x4(%ebp)
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-40004414: 83 ec 08 sub $0x8,%esp
-40004417: 6a 00 push $0x0
-40004419: 8d 45 f0 lea -0x10(%ebp),%eax
-4000441c: 50 push %eax
-4000441d: e8 f6 fe ff ff call 40004318 <asprintf_putc>
-40004422: 83 c4 10 add $0x10,%esp
-40004425: 83 f8 ff cmp $0xffffffff,%eax
-40004428: 75 09 jne 40004433 <vasprintf+0x92>
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
-4000442a: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-40004431: eb 2e jmp 40004461 <vasprintf+0xc0>
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40004433: 8b 55 f8 mov -0x8(%ebp),%edx
-40004436: 8b 45 f4 mov -0xc(%ebp),%eax
-40004439: 39 c2 cmp %eax,%edx
-4000443b: 73 16 jae 40004453 <vasprintf+0xb2>
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-4000443d: 8b 45 f8 mov -0x8(%ebp),%eax
-40004440: 8b 55 f0 mov -0x10(%ebp),%edx
-40004443: 83 ec 08 sub $0x8,%esp
-40004446: 50 push %eax
-40004447: 52 push %edx
-40004448: e8 32 48 00 00 call 40008c7f <realloc>
-4000444d: 83 c4 10 add $0x10,%esp
-40004450: 89 45 f0 mov %eax,-0x10(%ebp)
-{
- int result = 1;
- struct ata_request request;
-40004453: 8b 55 f0 mov -0x10(%ebp),%edx
-40004456: 8b 45 08 mov 0x8(%ebp),%eax
-40004459: 89 10 mov %edx,(%eax)
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-4000445b: 8b 45 fc mov -0x4(%ebp),%eax
-4000445e: 89 45 dc mov %eax,-0x24(%ebp)
-40004461: 8b 45 dc mov -0x24(%ebp),%eax
- uint16_t current_count;
-40004464: c9 leave
-40004465: c3 ret
-
-40004466 <asprintf>:
- void* current_buffer = buffer;
- uint64_t lba = start;
-
-40004466: 55 push %ebp
-40004467: 89 e5 mov %esp,%ebp
-40004469: 83 ec 18 sub $0x18,%esp
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-4000446c: 8d 45 10 lea 0x10(%ebp),%eax
-4000446f: 89 45 f8 mov %eax,-0x8(%ebp)
- while (count_left > 0) {
-40004472: 8b 45 f8 mov -0x8(%ebp),%eax
-40004475: 83 ec 04 sub $0x4,%esp
-40004478: 50 push %eax
-40004479: ff 75 0c pushl 0xc(%ebp)
-4000447c: ff 75 08 pushl 0x8(%ebp)
-4000447f: e8 1d ff ff ff call 400043a1 <vasprintf>
-40004484: 83 c4 10 add $0x10,%esp
-40004487: 89 45 fc mov %eax,-0x4(%ebp)
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
-4000448a: 8b 45 fc mov -0x4(%ebp),%eax
- } else {
-4000448d: c9 leave
-4000448e: c3 ret
-4000448f: 90 nop
-
-40004490 <exit>:
-
-#include "device.h"
-
-
-/**
- * ATA-Geraet identifizieren
-40004490: 55 push %ebp
-40004491: 89 e5 mov %esp,%ebp
-40004493: 83 ec 08 sub $0x8,%esp
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-40004496: 83 ec 0c sub $0xc,%esp
-40004499: ff 75 08 pushl 0x8(%ebp)
-4000449c: e8 1a 00 00 00 call 400044bb <_exit>
-400044a1: 83 c4 10 add $0x10,%esp
- */
-400044a4: c9 leave
-400044a5: c3 ret
-
-400044a6 <abort>:
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
-400044a6: 55 push %ebp
-400044a7: 89 e5 mov %esp,%ebp
-400044a9: 83 ec 08 sub $0x8,%esp
- .dev = dev,
-400044ac: 83 ec 0c sub $0xc,%esp
-400044af: 6a ff push $0xffffffff
-400044b1: e8 05 00 00 00 call 400044bb <_exit>
-400044b6: 83 c4 10 add $0x10,%esp
-
-400044b9: c9 leave
-400044ba: c3 ret
-
-400044bb <_exit>:
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-400044bb: 55 push %ebp
-400044bc: 89 e5 mov %esp,%ebp
-400044be: 83 ec 08 sub $0x8,%esp
- .block_size = ATA_SECTOR_SIZE,
-400044c1: 83 ec 0c sub $0xc,%esp
-400044c4: ff 75 08 pushl 0x8(%ebp)
-400044c7: e8 9c df ff ff call 40002468 <init_process_exit>
-400044cc: 83 c4 10 add $0x10,%esp
- .buffer = buffer,
-400044cf: e8 ba d8 ff ff call 40001d8e <destroy_process>
-
- .error = 0
-400044d4: eb fe jmp 400044d4 <_exit+0x19>
-400044d6: 90 nop
-400044d7: 90 nop
-
-400044d8 <fopen>:
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
-400044d8: 55 push %ebp
-400044d9: 89 e5 mov %esp,%ebp
-400044db: 53 push %ebx
-400044dc: 83 ec 34 sub $0x34,%esp
-400044df: 89 e0 mov %esp,%eax
-400044e1: 89 45 d8 mov %eax,-0x28(%ebp)
- .flags.direction = READ,
-400044e4: 83 ec 0c sub $0xc,%esp
-400044e7: ff 75 08 pushl 0x8(%ebp)
-400044ea: e8 63 e3 ff ff call 40002852 <io_get_absolute_path>
-400044ef: 83 c4 10 add $0x10,%esp
-400044f2: 89 45 e8 mov %eax,-0x18(%ebp)
- .flags.poll = 1,
- .flags.lba = 0,
-
-400044f5: 83 ec 0c sub $0xc,%esp
-400044f8: ff 75 e8 pushl -0x18(%ebp)
-400044fb: e8 74 4d 00 00 call 40009274 <strlen>
-40004500: 83 c4 10 add $0x10,%esp
-40004503: 83 c0 02 add $0x2,%eax
-40004506: 83 c0 0f add $0xf,%eax
-40004509: 83 c0 0f add $0xf,%eax
-4000450c: c1 e8 04 shr $0x4,%eax
-4000450f: c1 e0 04 shl $0x4,%eax
-40004512: 29 c4 sub %eax,%esp
-40004514: 89 65 d4 mov %esp,-0x2c(%ebp)
-40004517: 8b 45 d4 mov -0x2c(%ebp),%eax
-4000451a: 83 c0 0f add $0xf,%eax
-4000451d: c1 e8 04 shr $0x4,%eax
-40004520: c1 e0 04 shl $0x4,%eax
-40004523: 89 45 d4 mov %eax,-0x2c(%ebp)
-40004526: 8b 45 d4 mov -0x2c(%ebp),%eax
-40004529: 89 45 e4 mov %eax,-0x1c(%ebp)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-4000452c: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000452f: 89 45 ec mov %eax,-0x14(%ebp)
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-40004532: 8b 45 ec mov -0x14(%ebp),%eax
-40004535: c6 00 00 movb $0x0,(%eax)
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-40004538: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
-4000453f: e9 98 00 00 00 jmp 400045dc <fopen+0x104>
-
-40004544: 8b 45 f0 mov -0x10(%ebp),%eax
-40004547: 03 45 0c add 0xc(%ebp),%eax
-4000454a: 8a 00 mov (%eax),%al
-4000454c: 0f be c0 movsbl %al,%eax
-4000454f: 83 e8 61 sub $0x61,%eax
-40004552: 89 45 d0 mov %eax,-0x30(%ebp)
-40004555: 83 7d d0 16 cmpl $0x16,-0x30(%ebp)
-40004559: 77 7e ja 400045d9 <fopen+0x101>
-4000455b: 8b 55 d0 mov -0x30(%ebp),%edx
-4000455e: 8b 04 95 fc 98 00 40 mov 0x400098fc(,%edx,4),%eax
-40004565: ff e0 jmp *%eax
- .error = 0
- };
-40004567: 8b 45 ec mov -0x14(%ebp),%eax
-4000456a: 8a 00 mov (%eax),%al
-4000456c: 88 c2 mov %al,%dl
-4000456e: 83 ca 01 or $0x1,%edx
-40004571: 8b 45 ec mov -0x14(%ebp),%eax
-40004574: 88 10 mov %dl,(%eax)
-
-40004576: eb 61 jmp 400045d9 <fopen+0x101>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40004578: 8b 45 ec mov -0x14(%ebp),%eax
-4000457b: 8a 00 mov (%eax),%al
-4000457d: 88 c2 mov %al,%dl
-4000457f: 83 ca 2a or $0x2a,%edx
-40004582: 8b 45 ec mov -0x14(%ebp),%eax
-40004585: 88 10 mov %dl,(%eax)
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
-40004587: 8b 55 0c mov 0xc(%ebp),%edx
-4000458a: 42 inc %edx
-4000458b: 8b 45 f0 mov -0x10(%ebp),%eax
-4000458e: 8d 04 02 lea (%edx,%eax,1),%eax
-40004591: 8a 00 mov (%eax),%al
-40004593: 3c 2b cmp $0x2b,%al
-40004595: 75 42 jne 400045d9 <fopen+0x101>
- // Ein ATA-Geraet
-40004597: 8b 45 ec mov -0x14(%ebp),%eax
-4000459a: 8a 00 mov (%eax),%al
-4000459c: 88 c2 mov %al,%dl
-4000459e: 83 ca 01 or $0x1,%edx
-400045a1: 8b 45 ec mov -0x14(%ebp),%eax
-400045a4: 88 10 mov %dl,(%eax)
- dev->atapi = 0;
-
-400045a6: eb 31 jmp 400045d9 <fopen+0x101>
- // TODO: Informationen verarbeiten
-
- return 1;
-400045a8: 8b 45 ec mov -0x14(%ebp),%eax
-400045ab: 8a 00 mov (%eax),%al
-400045ad: 88 c2 mov %al,%dl
-400045af: 83 ca 26 or $0x26,%edx
-400045b2: 8b 45 ec mov -0x14(%ebp),%eax
-400045b5: 88 10 mov %dl,(%eax)
-}
-
-400045b7: eb 20 jmp 400045d9 <fopen+0x101>
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-400045b9: 8b 45 ec mov -0x14(%ebp),%eax
-400045bc: 8a 00 mov (%eax),%al
-400045be: 88 c2 mov %al,%dl
-400045c0: 83 ca 10 or $0x10,%edx
-400045c3: 8b 45 ec mov -0x14(%ebp),%eax
-400045c6: 88 10 mov %dl,(%eax)
- * @param start LBA des Startsektors
-400045c8: eb 0f jmp 400045d9 <fopen+0x101>
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-400045ca: 8b 45 ec mov -0x14(%ebp),%eax
-400045cd: 8a 00 mov (%eax),%al
-400045cf: 88 c2 mov %al,%dl
-400045d1: 83 ca 40 or $0x40,%edx
-400045d4: 8b 45 ec mov -0x14(%ebp),%eax
-400045d7: 88 10 mov %dl,(%eax)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-400045d9: ff 45 f0 incl -0x10(%ebp)
-400045dc: 8b 5d f0 mov -0x10(%ebp),%ebx
-400045df: 83 ec 0c sub $0xc,%esp
-400045e2: ff 75 0c pushl 0xc(%ebp)
-400045e5: e8 8a 4c 00 00 call 40009274 <strlen>
-400045ea: 83 c4 10 add $0x10,%esp
-400045ed: 39 c3 cmp %eax,%ebx
-400045ef: 0f 82 4f ff ff ff jb 40004544 <fopen+0x6c>
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
- int result = 1;
- struct ata_request request;
-400045f5: 83 ec 0c sub $0xc,%esp
-400045f8: ff 75 e8 pushl -0x18(%ebp)
-400045fb: e8 74 4c 00 00 call 40009274 <strlen>
-40004600: 83 c4 10 add $0x10,%esp
-40004603: 8d 50 01 lea 0x1(%eax),%edx
-40004606: 8b 45 e4 mov -0x1c(%ebp),%eax
-40004609: 40 inc %eax
-4000460a: 83 ec 04 sub $0x4,%esp
-4000460d: 52 push %edx
-4000460e: ff 75 e8 pushl -0x18(%ebp)
-40004611: 50 push %eax
-40004612: e8 51 49 00 00 call 40008f68 <memcpy>
-40004617: 83 c4 10 add $0x10,%esp
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
-4000461a: 8b 5d e4 mov -0x1c(%ebp),%ebx
-4000461d: 83 ec 0c sub $0xc,%esp
-40004620: ff 75 e8 pushl -0x18(%ebp)
-40004623: e8 4c 4c 00 00 call 40009274 <strlen>
-40004628: 83 c4 10 add $0x10,%esp
-4000462b: 83 c0 02 add $0x2,%eax
-4000462e: 53 push %ebx
-4000462f: 50 push %eax
-40004630: 68 f0 98 00 40 push $0x400098f0
-40004635: 6a 01 push $0x1
-40004637: e8 f1 ef ff ff call 4000362d <rpc_get_response>
-4000463c: 83 c4 10 add $0x10,%esp
-4000463f: 89 45 f4 mov %eax,-0xc(%ebp)
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-40004642: 83 ec 0c sub $0xc,%esp
-40004645: ff 75 e8 pushl -0x18(%ebp)
-40004648: e8 62 43 00 00 call 400089af <free>
-4000464d: 83 c4 10 add $0x10,%esp
- size_t count_left = count;
-
-40004650: 8b 45 f4 mov -0xc(%ebp),%eax
-40004653: 8b 40 0c mov 0xc(%eax),%eax
-40004656: 89 45 f8 mov %eax,-0x8(%ebp)
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40004659: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-4000465d: 74 14 je 40004673 <fopen+0x19b>
-4000465f: 8b 45 f8 mov -0x8(%ebp),%eax
-40004662: 8b 40 04 mov 0x4(%eax),%eax
-40004665: 85 c0 test %eax,%eax
-40004667: 74 0a je 40004673 <fopen+0x19b>
-40004669: 8b 45 f4 mov -0xc(%ebp),%eax
-4000466c: 8b 40 08 mov 0x8(%eax),%eax
-4000466f: 85 c0 test %eax,%eax
-40004671: 75 09 jne 4000467c <fopen+0x1a4>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40004673: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-4000467a: eb 25 jmp 400046a1 <fopen+0x1c9>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
-4000467c: 8b 45 f8 mov -0x8(%ebp),%eax
-4000467f: c6 40 1c 00 movb $0x0,0x1c(%eax)
- } else {
-40004683: 8b 45 f8 mov -0x8(%ebp),%eax
-40004686: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
- current_count = count_left;
-4000468d: 8b 45 f8 mov -0x8(%ebp),%eax
-40004690: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax)
- }
-40004697: 8b 45 f8 mov -0x8(%ebp),%eax
-4000469a: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-
- // Request vorbereiten
-400046a1: 83 ec 0c sub $0xc,%esp
-400046a4: ff 75 f4 pushl -0xc(%ebp)
-400046a7: e8 03 43 00 00 call 400089af <free>
-400046ac: 83 c4 10 add $0x10,%esp
- request.dev = dev;
- // TODO: DMA, UltraDMA...
-400046af: 8b 45 f8 mov -0x8(%ebp),%eax
-400046b2: 8b 65 d8 mov -0x28(%ebp),%esp
- request.protocol = PIO;
-400046b5: 8b 5d fc mov -0x4(%ebp),%ebx
-400046b8: c9 leave
-400046b9: c3 ret
-
-400046ba <fclose>:
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
-400046ba: 55 push %ebp
-400046bb: 89 e5 mov %esp,%ebp
-400046bd: 83 ec 18 sub $0x18,%esp
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-
-400046c0: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-400046c4: 74 0a je 400046d0 <fclose+0x16>
-400046c6: 8b 45 08 mov 0x8(%ebp),%eax
-400046c9: 8b 40 04 mov 0x4(%eax),%eax
-400046cc: 85 c0 test %eax,%eax
-400046ce: 75 09 jne 400046d9 <fclose+0x1f>
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
-400046d0: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-400046d7: eb 33 jmp 4000470c <fclose+0x52>
- request.blocks_done = 0;
- request.buffer = current_buffer;
-
-400046d9: 8b 45 08 mov 0x8(%ebp),%eax
-400046dc: 89 c2 mov %eax,%edx
-400046de: 8b 45 08 mov 0x8(%ebp),%eax
-400046e1: 8b 40 04 mov 0x4(%eax),%eax
-400046e4: 52 push %edx
-400046e5: 6a 04 push $0x4
-400046e7: 68 58 99 00 40 push $0x40009958
-400046ec: 50 push %eax
-400046ed: e8 cb ed ff ff call 400034bd <rpc_get_dword>
-400046f2: 83 c4 10 add $0x10,%esp
-400046f5: 89 45 fc mov %eax,-0x4(%ebp)
- request.error = NO_ERROR;
-
-400046f8: 83 ec 0c sub $0xc,%esp
-400046fb: ff 75 08 pushl 0x8(%ebp)
-400046fe: e8 ac 42 00 00 call 400089af <free>
-40004703: 83 c4 10 add $0x10,%esp
- // TODO: LBA48
- // TODO: CHS
-40004706: 8b 45 fc mov -0x4(%ebp),%eax
-40004709: 89 45 ec mov %eax,-0x14(%ebp)
-4000470c: 8b 45 ec mov -0x14(%ebp),%eax
-
-4000470f: c9 leave
-40004710: c3 ret
-
-40004711 <fread>:
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-}
-40004711: 55 push %ebp
-40004712: 89 e5 mov %esp,%ebp
-40004714: 56 push %esi
-40004715: 53 push %ebx
-40004716: 83 ec 40 sub $0x40,%esp
-
-40004719: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
-4000471d: 74 0a je 40004729 <fread+0x18>
-4000471f: 8b 45 14 mov 0x14(%ebp),%eax
-40004722: 8b 40 04 mov 0x4(%eax),%eax
-40004725: 85 c0 test %eax,%eax
-40004727: 75 0c jne 40004735 <fread+0x24>
-40004729: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%ebp)
-40004730: e9 b3 02 00 00 jmp 400049e8 <fread+0x2d7>
-40004735: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-4000473c: 8b 45 14 mov 0x14(%ebp),%eax
-4000473f: 8b 40 1d mov 0x1d(%eax),%eax
-40004742: 85 c0 test %eax,%eax
-40004744: 0f 84 0a 01 00 00 je 40004854 <fread+0x143>
-4000474a: 8b 45 14 mov 0x14(%ebp),%eax
-4000474d: 8b 50 1d mov 0x1d(%eax),%edx
-40004750: 8b 45 0c mov 0xc(%ebp),%eax
-40004753: 89 c1 mov %eax,%ecx
-40004755: 0f af 4d 10 imul 0x10(%ebp),%ecx
-40004759: 89 4d c4 mov %ecx,-0x3c(%ebp)
-4000475c: 89 55 bc mov %edx,-0x44(%ebp)
-4000475f: 8b 75 c4 mov -0x3c(%ebp),%esi
-40004762: 39 75 bc cmp %esi,-0x44(%ebp)
-40004765: 76 06 jbe 4000476d <fread+0x5c>
-40004767: 8b 45 c4 mov -0x3c(%ebp),%eax
-4000476a: 89 45 bc mov %eax,-0x44(%ebp)
-4000476d: 8b 55 bc mov -0x44(%ebp),%edx
-40004770: 89 55 d8 mov %edx,-0x28(%ebp)
-40004773: c7 45 dc 01 00 00 00 movl $0x1,-0x24(%ebp)
-4000477a: eb 2d jmp 400047a9 <fread+0x98>
-4000477c: 8b 45 08 mov 0x8(%ebp),%eax
-4000477f: 89 c2 mov %eax,%edx
-40004781: 8b 45 dc mov -0x24(%ebp),%eax
-40004784: 8d 04 02 lea (%edx,%eax,1),%eax
-40004787: 48 dec %eax
-40004788: 89 c1 mov %eax,%ecx
-4000478a: 8b 45 14 mov 0x14(%ebp),%eax
-4000478d: 8b 58 21 mov 0x21(%eax),%ebx
-40004790: 8b 45 14 mov 0x14(%ebp),%eax
-40004793: 8b 50 1d mov 0x1d(%eax),%edx
-40004796: 8b 45 dc mov -0x24(%ebp),%eax
-40004799: 89 d6 mov %edx,%esi
-4000479b: 29 c6 sub %eax,%esi
-4000479d: 89 f0 mov %esi,%eax
-4000479f: 8d 04 03 lea (%ebx,%eax,1),%eax
-400047a2: 8a 00 mov (%eax),%al
-400047a4: 88 01 mov %al,(%ecx)
-400047a6: ff 45 dc incl -0x24(%ebp)
-400047a9: 8b 45 dc mov -0x24(%ebp),%eax
-400047ac: 3b 45 d8 cmp -0x28(%ebp),%eax
-400047af: 76 cb jbe 4000477c <fread+0x6b>
-400047b1: 8b 45 14 mov 0x14(%ebp),%eax
-400047b4: 8b 40 1d mov 0x1d(%eax),%eax
-400047b7: 89 c2 mov %eax,%edx
-400047b9: 2b 55 d8 sub -0x28(%ebp),%edx
-400047bc: 8b 45 14 mov 0x14(%ebp),%eax
-400047bf: 89 50 1d mov %edx,0x1d(%eax)
-400047c2: 8b 45 14 mov 0x14(%ebp),%eax
-400047c5: 8b 50 1d mov 0x1d(%eax),%edx
-400047c8: 8b 45 14 mov 0x14(%ebp),%eax
-400047cb: 8b 40 21 mov 0x21(%eax),%eax
-400047ce: 83 ec 08 sub $0x8,%esp
-400047d1: 52 push %edx
-400047d2: 50 push %eax
-400047d3: e8 a7 44 00 00 call 40008c7f <realloc>
-400047d8: 83 c4 10 add $0x10,%esp
-400047db: 89 45 e0 mov %eax,-0x20(%ebp)
-400047de: 8b 45 14 mov 0x14(%ebp),%eax
-400047e1: 8b 40 1d mov 0x1d(%eax),%eax
-400047e4: 85 c0 test %eax,%eax
-400047e6: 75 12 jne 400047fa <fread+0xe9>
-400047e8: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
-400047ec: 75 0c jne 400047fa <fread+0xe9>
-400047ee: 8b 45 14 mov 0x14(%ebp),%eax
-400047f1: c7 40 21 00 00 00 00 movl $0x0,0x21(%eax)
-400047f8: eb 43 jmp 4000483d <fread+0x12c>
-400047fa: 8b 45 14 mov 0x14(%ebp),%eax
-400047fd: 8b 40 1d mov 0x1d(%eax),%eax
-40004800: 85 c0 test %eax,%eax
-40004802: 75 20 jne 40004824 <fread+0x113>
-40004804: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
-40004808: 74 1a je 40004824 <fread+0x113>
-4000480a: 83 ec 0c sub $0xc,%esp
-4000480d: ff 75 e0 pushl -0x20(%ebp)
-40004810: e8 9a 41 00 00 call 400089af <free>
-40004815: 83 c4 10 add $0x10,%esp
-40004818: 8b 45 14 mov 0x14(%ebp),%eax
-4000481b: c7 40 21 00 00 00 00 movl $0x0,0x21(%eax)
-40004822: eb 19 jmp 4000483d <fread+0x12c>
-40004824: 8b 45 14 mov 0x14(%ebp),%eax
-40004827: 8b 40 1d mov 0x1d(%eax),%eax
-4000482a: 85 c0 test %eax,%eax
-4000482c: 74 0f je 4000483d <fread+0x12c>
-4000482e: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
-40004832: 74 09 je 4000483d <fread+0x12c>
-40004834: 8b 55 14 mov 0x14(%ebp),%edx
-40004837: 8b 45 e0 mov -0x20(%ebp),%eax
-4000483a: 89 42 21 mov %eax,0x21(%edx)
-4000483d: 8b 45 0c mov 0xc(%ebp),%eax
-40004840: 0f af 45 10 imul 0x10(%ebp),%eax
-40004844: 3b 45 d8 cmp -0x28(%ebp),%eax
-40004847: 75 0b jne 40004854 <fread+0x143>
-40004849: 8b 45 d8 mov -0x28(%ebp),%eax
-4000484c: 89 45 c0 mov %eax,-0x40(%ebp)
-4000484f: e9 94 01 00 00 jmp 400049e8 <fread+0x2d7>
-40004854: 8b 45 14 mov 0x14(%ebp),%eax
-40004857: 8b 00 mov (%eax),%eax
-40004859: 89 45 c8 mov %eax,-0x38(%ebp)
-4000485c: 8b 45 0c mov 0xc(%ebp),%eax
-4000485f: 89 45 cc mov %eax,-0x34(%ebp)
-40004862: 8b 45 10 mov 0x10(%ebp),%eax
-40004865: 89 45 d0 mov %eax,-0x30(%ebp)
-40004868: 8b 45 0c mov 0xc(%ebp),%eax
-4000486b: 0f af 45 10 imul 0x10(%ebp),%eax
-4000486f: 2b 45 d8 sub -0x28(%ebp),%eax
-40004872: 3d 00 04 00 00 cmp $0x400,%eax
-40004877: 0f 86 c9 00 00 00 jbe 40004946 <fread+0x235>
-4000487d: 8b 55 cc mov -0x34(%ebp),%edx
-40004880: 8b 45 d0 mov -0x30(%ebp),%eax
-40004883: 0f af c2 imul %edx,%eax
-40004886: 83 ec 0c sub $0xc,%esp
-40004889: 50 push %eax
-4000488a: e8 1d 23 00 00 call 40006bac <create_shared_memory>
-4000488f: 83 c4 10 add $0x10,%esp
-40004892: 89 45 d4 mov %eax,-0x2c(%ebp)
-40004895: 8b 45 d4 mov -0x2c(%ebp),%eax
-40004898: 83 ec 0c sub $0xc,%esp
-4000489b: 50 push %eax
-4000489c: e8 27 23 00 00 call 40006bc8 <open_shared_memory>
-400048a1: 83 c4 10 add $0x10,%esp
-400048a4: 89 45 e4 mov %eax,-0x1c(%ebp)
-400048a7: 8d 55 c8 lea -0x38(%ebp),%edx
-400048aa: 8b 45 14 mov 0x14(%ebp),%eax
-400048ad: 8b 40 04 mov 0x4(%eax),%eax
-400048b0: 52 push %edx
-400048b1: 6a 10 push $0x10
-400048b3: 68 61 99 00 40 push $0x40009961
-400048b8: 50 push %eax
-400048b9: e8 6f ed ff ff call 4000362d <rpc_get_response>
-400048be: 83 c4 10 add $0x10,%esp
-400048c1: 89 45 e8 mov %eax,-0x18(%ebp)
-400048c4: 8b 45 e8 mov -0x18(%ebp),%eax
-400048c7: 8b 40 0c mov 0xc(%eax),%eax
-400048ca: 8b 00 mov (%eax),%eax
-400048cc: 89 45 ec mov %eax,-0x14(%ebp)
-400048cf: 8b 45 d8 mov -0x28(%ebp),%eax
-400048d2: 8b 55 ec mov -0x14(%ebp),%edx
-400048d5: 01 c2 add %eax,%edx
-400048d7: 8b 45 0c mov 0xc(%ebp),%eax
-400048da: 0f af 45 10 imul 0x10(%ebp),%eax
-400048de: 39 c2 cmp %eax,%edx
-400048e0: 76 0d jbe 400048ef <fread+0x1de>
-400048e2: 8b 45 0c mov 0xc(%ebp),%eax
-400048e5: 0f af 45 10 imul 0x10(%ebp),%eax
-400048e9: 2b 45 d8 sub -0x28(%ebp),%eax
-400048ec: 89 45 ec mov %eax,-0x14(%ebp)
-400048ef: 8b 45 08 mov 0x8(%ebp),%eax
-400048f2: 03 45 d8 add -0x28(%ebp),%eax
-400048f5: 83 ec 04 sub $0x4,%esp
-400048f8: ff 75 ec pushl -0x14(%ebp)
-400048fb: ff 75 e4 pushl -0x1c(%ebp)
-400048fe: 50 push %eax
-400048ff: e8 64 46 00 00 call 40008f68 <memcpy>
-40004904: 83 c4 10 add $0x10,%esp
-40004907: 8b 45 d4 mov -0x2c(%ebp),%eax
-4000490a: 83 ec 0c sub $0xc,%esp
-4000490d: 50 push %eax
-4000490e: e8 d1 22 00 00 call 40006be4 <close_shared_memory>
-40004913: 83 c4 10 add $0x10,%esp
-40004916: 8b 45 e8 mov -0x18(%ebp),%eax
-40004919: 8b 40 0c mov 0xc(%eax),%eax
-4000491c: 83 ec 0c sub $0xc,%esp
-4000491f: 50 push %eax
-40004920: e8 8a 40 00 00 call 400089af <free>
-40004925: 83 c4 10 add $0x10,%esp
-40004928: 83 ec 0c sub $0xc,%esp
-4000492b: ff 75 e8 pushl -0x18(%ebp)
-4000492e: e8 7c 40 00 00 call 400089af <free>
-40004933: 83 c4 10 add $0x10,%esp
-40004936: 8b 45 d8 mov -0x28(%ebp),%eax
-40004939: 8b 55 ec mov -0x14(%ebp),%edx
-4000493c: 01 c2 add %eax,%edx
-4000493e: 89 55 c0 mov %edx,-0x40(%ebp)
-40004941: e9 a2 00 00 00 jmp 400049e8 <fread+0x2d7>
-40004946: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
-4000494d: 83 ec 0c sub $0xc,%esp
-40004950: ff 75 14 pushl 0x14(%ebp)
-40004953: e8 46 07 00 00 call 4000509e <fflush>
-40004958: 83 c4 10 add $0x10,%esp
-4000495b: 8d 55 c8 lea -0x38(%ebp),%edx
-4000495e: 8b 45 14 mov 0x14(%ebp),%eax
-40004961: 8b 40 04 mov 0x4(%eax),%eax
-40004964: 52 push %edx
-40004965: 6a 10 push $0x10
-40004967: 68 61 99 00 40 push $0x40009961
-4000496c: 50 push %eax
-4000496d: e8 bb ec ff ff call 4000362d <rpc_get_response>
-40004972: 83 c4 10 add $0x10,%esp
-40004975: 89 45 f0 mov %eax,-0x10(%ebp)
-40004978: 8b 45 f0 mov -0x10(%ebp),%eax
-4000497b: 8b 40 08 mov 0x8(%eax),%eax
-4000497e: 89 45 f4 mov %eax,-0xc(%ebp)
-40004981: 8b 45 d8 mov -0x28(%ebp),%eax
-40004984: 8b 55 f4 mov -0xc(%ebp),%edx
-40004987: 01 c2 add %eax,%edx
-40004989: 8b 45 0c mov 0xc(%ebp),%eax
-4000498c: 0f af 45 10 imul 0x10(%ebp),%eax
-40004990: 39 c2 cmp %eax,%edx
-40004992: 76 0d jbe 400049a1 <fread+0x290>
-40004994: 8b 45 0c mov 0xc(%ebp),%eax
-40004997: 0f af 45 10 imul 0x10(%ebp),%eax
-4000499b: 2b 45 d8 sub -0x28(%ebp),%eax
-4000499e: 89 45 f4 mov %eax,-0xc(%ebp)
-400049a1: 8b 45 f0 mov -0x10(%ebp),%eax
-400049a4: 8b 50 0c mov 0xc(%eax),%edx
-400049a7: 8b 45 08 mov 0x8(%ebp),%eax
-400049aa: 03 45 d8 add -0x28(%ebp),%eax
-400049ad: 83 ec 04 sub $0x4,%esp
-400049b0: ff 75 f4 pushl -0xc(%ebp)
-400049b3: 52 push %edx
-400049b4: 50 push %eax
-400049b5: e8 ae 45 00 00 call 40008f68 <memcpy>
-400049ba: 83 c4 10 add $0x10,%esp
-400049bd: 8b 45 f0 mov -0x10(%ebp),%eax
-400049c0: 8b 40 0c mov 0xc(%eax),%eax
-400049c3: 83 ec 0c sub $0xc,%esp
-400049c6: 50 push %eax
-400049c7: e8 e3 3f 00 00 call 400089af <free>
-400049cc: 83 c4 10 add $0x10,%esp
-400049cf: 83 ec 0c sub $0xc,%esp
-400049d2: ff 75 f0 pushl -0x10(%ebp)
-400049d5: e8 d5 3f 00 00 call 400089af <free>
-400049da: 83 c4 10 add $0x10,%esp
-400049dd: 8b 45 d8 mov -0x28(%ebp),%eax
-400049e0: 8b 4d f4 mov -0xc(%ebp),%ecx
-400049e3: 01 c1 add %eax,%ecx
-400049e5: 89 4d c0 mov %ecx,-0x40(%ebp)
-400049e8: 8b 45 c0 mov -0x40(%ebp),%eax
-400049eb: 8d 65 f8 lea -0x8(%ebp),%esp
-400049ee: 5b pop %ebx
-400049ef: 5e pop %esi
-400049f0: c9 leave
-400049f1: c3 ret
-
-400049f2 <fgetc>:
-400049f2: 55 push %ebp
-400049f3: 89 e5 mov %esp,%ebp
-400049f5: 83 ec 18 sub $0x18,%esp
-400049f8: 83 ec 0c sub $0xc,%esp
-400049fb: ff 75 08 pushl 0x8(%ebp)
-400049fe: e8 fd 05 00 00 call 40005000 <feof>
-40004a03: 83 c4 10 add $0x10,%esp
-40004a06: 85 c0 test %eax,%eax
-40004a08: 75 23 jne 40004a2d <fgetc+0x3b>
-40004a0a: ff 75 08 pushl 0x8(%ebp)
-40004a0d: 6a 01 push $0x1
-40004a0f: 6a 01 push $0x1
-40004a11: 8d 45 ff lea -0x1(%ebp),%eax
-40004a14: 50 push %eax
-40004a15: e8 f7 fc ff ff call 40004711 <fread>
-40004a1a: 83 c4 10 add $0x10,%esp
-40004a1d: 83 f8 01 cmp $0x1,%eax
-40004a20: 75 0b jne 40004a2d <fgetc+0x3b>
-40004a22: 8a 45 ff mov -0x1(%ebp),%al
-40004a25: 0f be c0 movsbl %al,%eax
-40004a28: 89 45 ec mov %eax,-0x14(%ebp)
-40004a2b: eb 07 jmp 40004a34 <fgetc+0x42>
-40004a2d: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004a34: 8b 45 ec mov -0x14(%ebp),%eax
-40004a37: c9 leave
-40004a38: c3 ret
-
-40004a39 <fgets>:
-40004a39: 55 push %ebp
-40004a3a: 89 e5 mov %esp,%ebp
-40004a3c: 83 ec 18 sub $0x18,%esp
-40004a3f: 83 ec 0c sub $0xc,%esp
-40004a42: ff 75 10 pushl 0x10(%ebp)
-40004a45: e8 b6 05 00 00 call 40005000 <feof>
-40004a4a: 83 c4 10 add $0x10,%esp
-40004a4d: 85 c0 test %eax,%eax
-40004a4f: 75 12 jne 40004a63 <fgets+0x2a>
-40004a51: 83 ec 0c sub $0xc,%esp
-40004a54: ff 75 10 pushl 0x10(%ebp)
-40004a57: e8 0e 06 00 00 call 4000506a <ferror>
-40004a5c: 83 c4 10 add $0x10,%esp
-40004a5f: 85 c0 test %eax,%eax
-40004a61: 74 09 je 40004a6c <fgets+0x33>
-40004a63: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40004a6a: eb 7b jmp 40004ae7 <fgets+0xae>
-40004a6c: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40004a73: eb 4e jmp 40004ac3 <fgets+0x8a>
-40004a75: 83 ec 0c sub $0xc,%esp
-40004a78: ff 75 10 pushl 0x10(%ebp)
-40004a7b: e8 72 ff ff ff call 400049f2 <fgetc>
-40004a80: 83 c4 10 add $0x10,%esp
-40004a83: 89 45 fc mov %eax,-0x4(%ebp)
-40004a86: 83 7d fc ff cmpl $0xffffffff,-0x4(%ebp)
-40004a8a: 75 1b jne 40004aa7 <fgets+0x6e>
-40004a8c: 83 ec 0c sub $0xc,%esp
-40004a8f: ff 75 10 pushl 0x10(%ebp)
-40004a92: e8 d3 05 00 00 call 4000506a <ferror>
-40004a97: 83 c4 10 add $0x10,%esp
-40004a9a: 85 c0 test %eax,%eax
-40004a9c: 74 09 je 40004aa7 <fgets+0x6e>
-40004a9e: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40004aa5: eb 25 jmp 40004acc <fgets+0x93>
-40004aa7: 83 7d fc ff cmpl $0xffffffff,-0x4(%ebp)
-40004aab: 74 13 je 40004ac0 <fgets+0x87>
-40004aad: 83 7d fc 0a cmpl $0xa,-0x4(%ebp)
-40004ab1: 74 19 je 40004acc <fgets+0x93>
-40004ab3: 8b 45 fc mov -0x4(%ebp),%eax
-40004ab6: 88 c2 mov %al,%dl
-40004ab8: 8b 45 08 mov 0x8(%ebp),%eax
-40004abb: 88 10 mov %dl,(%eax)
-40004abd: ff 45 08 incl 0x8(%ebp)
-40004ac0: ff 45 f8 incl -0x8(%ebp)
-40004ac3: 8b 45 0c mov 0xc(%ebp),%eax
-40004ac6: 48 dec %eax
-40004ac7: 3b 45 f8 cmp -0x8(%ebp),%eax
-40004aca: 7f a9 jg 40004a75 <fgets+0x3c>
-40004acc: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40004ad0: 75 09 jne 40004adb <fgets+0xa2>
-40004ad2: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40004ad9: eb 0c jmp 40004ae7 <fgets+0xae>
-40004adb: 8b 45 08 mov 0x8(%ebp),%eax
-40004ade: c6 00 00 movb $0x0,(%eax)
-40004ae1: 8b 45 08 mov 0x8(%ebp),%eax
-40004ae4: 89 45 ec mov %eax,-0x14(%ebp)
-40004ae7: 8b 45 ec mov -0x14(%ebp),%eax
-40004aea: c9 leave
-40004aeb: c3 ret
-
-40004aec <ungetc>:
-40004aec: 55 push %ebp
-40004aed: 89 e5 mov %esp,%ebp
-40004aef: 83 ec 18 sub $0x18,%esp
-40004af2: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40004af6: 75 09 jne 40004b01 <ungetc+0x15>
-40004af8: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004aff: eb 62 jmp 40004b63 <ungetc+0x77>
-40004b01: 8b 45 0c mov 0xc(%ebp),%eax
-40004b04: 8b 40 1d mov 0x1d(%eax),%eax
-40004b07: 8d 50 01 lea 0x1(%eax),%edx
-40004b0a: 8b 45 0c mov 0xc(%ebp),%eax
-40004b0d: 8b 40 21 mov 0x21(%eax),%eax
-40004b10: 83 ec 08 sub $0x8,%esp
-40004b13: 52 push %edx
-40004b14: 50 push %eax
-40004b15: e8 65 41 00 00 call 40008c7f <realloc>
-40004b1a: 83 c4 10 add $0x10,%esp
-40004b1d: 89 45 fc mov %eax,-0x4(%ebp)
-40004b20: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40004b24: 75 09 jne 40004b2f <ungetc+0x43>
-40004b26: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004b2d: eb 34 jmp 40004b63 <ungetc+0x77>
-40004b2f: 8b 55 0c mov 0xc(%ebp),%edx
-40004b32: 8b 45 fc mov -0x4(%ebp),%eax
-40004b35: 89 42 21 mov %eax,0x21(%edx)
-40004b38: 8b 45 0c mov 0xc(%ebp),%eax
-40004b3b: 8b 40 1d mov 0x1d(%eax),%eax
-40004b3e: 8d 50 01 lea 0x1(%eax),%edx
-40004b41: 8b 45 0c mov 0xc(%ebp),%eax
-40004b44: 89 50 1d mov %edx,0x1d(%eax)
-40004b47: 8b 45 0c mov 0xc(%ebp),%eax
-40004b4a: 8b 40 21 mov 0x21(%eax),%eax
-40004b4d: 8d 50 ff lea -0x1(%eax),%edx
-40004b50: 8b 45 0c mov 0xc(%ebp),%eax
-40004b53: 8b 40 1d mov 0x1d(%eax),%eax
-40004b56: 01 c2 add %eax,%edx
-40004b58: 8b 45 08 mov 0x8(%ebp),%eax
-40004b5b: 88 02 mov %al,(%edx)
-40004b5d: 8b 45 08 mov 0x8(%ebp),%eax
-40004b60: 89 45 ec mov %eax,-0x14(%ebp)
-40004b63: 8b 45 ec mov -0x14(%ebp),%eax
-40004b66: c9 leave
-40004b67: c3 ret
-
-40004b68 <io_write>:
-40004b68: 55 push %ebp
-40004b69: 89 e5 mov %esp,%ebp
-40004b6b: 83 ec 28 sub $0x28,%esp
-40004b6e: 89 e0 mov %esp,%eax
-40004b70: 89 45 dc mov %eax,-0x24(%ebp)
-40004b73: 8b 45 10 mov 0x10(%ebp),%eax
-40004b76: 0f af 45 0c imul 0xc(%ebp),%eax
-40004b7a: 89 45 ec mov %eax,-0x14(%ebp)
-40004b7d: c7 45 f0 10 00 00 00 movl $0x10,-0x10(%ebp)
-40004b84: 81 7d ec ff 03 00 00 cmpl $0x3ff,-0x14(%ebp)
-40004b8b: 77 06 ja 40004b93 <io_write+0x2b>
-40004b8d: 8b 45 ec mov -0x14(%ebp),%eax
-40004b90: 01 45 f0 add %eax,-0x10(%ebp)
-40004b93: 8b 45 f0 mov -0x10(%ebp),%eax
-40004b96: 83 c0 0f add $0xf,%eax
-40004b99: 83 c0 0f add $0xf,%eax
-40004b9c: c1 e8 04 shr $0x4,%eax
-40004b9f: c1 e0 04 shl $0x4,%eax
-40004ba2: 29 c4 sub %eax,%esp
-40004ba4: 89 65 d8 mov %esp,-0x28(%ebp)
-40004ba7: 8b 45 d8 mov -0x28(%ebp),%eax
-40004baa: 83 c0 0f add $0xf,%eax
-40004bad: c1 e8 04 shr $0x4,%eax
-40004bb0: c1 e0 04 shl $0x4,%eax
-40004bb3: 89 45 d8 mov %eax,-0x28(%ebp)
-40004bb6: 8b 45 d8 mov -0x28(%ebp),%eax
-40004bb9: 89 45 e8 mov %eax,-0x18(%ebp)
-40004bbc: 8b 45 e8 mov -0x18(%ebp),%eax
-40004bbf: 89 45 f4 mov %eax,-0xc(%ebp)
-40004bc2: 8b 45 14 mov 0x14(%ebp),%eax
-40004bc5: 8b 10 mov (%eax),%edx
-40004bc7: 8b 45 f4 mov -0xc(%ebp),%eax
-40004bca: 89 10 mov %edx,(%eax)
-40004bcc: 8b 55 f4 mov -0xc(%ebp),%edx
-40004bcf: 8b 45 0c mov 0xc(%ebp),%eax
-40004bd2: 89 42 04 mov %eax,0x4(%edx)
-40004bd5: 8b 55 f4 mov -0xc(%ebp),%edx
-40004bd8: 8b 45 10 mov 0x10(%ebp),%eax
-40004bdb: 89 42 08 mov %eax,0x8(%edx)
-40004bde: 81 7d ec ff 03 00 00 cmpl $0x3ff,-0x14(%ebp)
-40004be5: 77 24 ja 40004c0b <io_write+0xa3>
-40004be7: 8b 45 f4 mov -0xc(%ebp),%eax
-40004bea: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
-40004bf1: 8b 45 f4 mov -0xc(%ebp),%eax
-40004bf4: 83 c0 10 add $0x10,%eax
-40004bf7: 83 ec 04 sub $0x4,%esp
-40004bfa: ff 75 ec pushl -0x14(%ebp)
-40004bfd: ff 75 08 pushl 0x8(%ebp)
-40004c00: 50 push %eax
-40004c01: e8 62 43 00 00 call 40008f68 <memcpy>
-40004c06: 83 c4 10 add $0x10,%esp
-40004c09: eb 3f jmp 40004c4a <io_write+0xe2>
-40004c0b: 83 ec 0c sub $0xc,%esp
-40004c0e: ff 75 ec pushl -0x14(%ebp)
-40004c11: e8 96 1f 00 00 call 40006bac <create_shared_memory>
-40004c16: 83 c4 10 add $0x10,%esp
-40004c19: 89 c2 mov %eax,%edx
-40004c1b: 8b 45 f4 mov -0xc(%ebp),%eax
-40004c1e: 89 50 0c mov %edx,0xc(%eax)
-40004c21: 8b 45 f4 mov -0xc(%ebp),%eax
-40004c24: 8b 40 0c mov 0xc(%eax),%eax
-40004c27: 83 ec 0c sub $0xc,%esp
-40004c2a: 50 push %eax
-40004c2b: e8 98 1f 00 00 call 40006bc8 <open_shared_memory>
-40004c30: 83 c4 10 add $0x10,%esp
-40004c33: 89 45 fc mov %eax,-0x4(%ebp)
-40004c36: 83 ec 04 sub $0x4,%esp
-40004c39: ff 75 ec pushl -0x14(%ebp)
-40004c3c: ff 75 08 pushl 0x8(%ebp)
-40004c3f: ff 75 fc pushl -0x4(%ebp)
-40004c42: e8 21 43 00 00 call 40008f68 <memcpy>
-40004c47: 83 c4 10 add $0x10,%esp
-40004c4a: 8b 45 e8 mov -0x18(%ebp),%eax
-40004c4d: 89 c2 mov %eax,%edx
-40004c4f: 8b 45 14 mov 0x14(%ebp),%eax
-40004c52: 8b 40 04 mov 0x4(%eax),%eax
-40004c55: 52 push %edx
-40004c56: ff 75 f0 pushl -0x10(%ebp)
-40004c59: 68 6a 99 00 40 push $0x4000996a
-40004c5e: 50 push %eax
-40004c5f: e8 59 e8 ff ff call 400034bd <rpc_get_dword>
-40004c64: 83 c4 10 add $0x10,%esp
-40004c67: 89 45 f8 mov %eax,-0x8(%ebp)
-40004c6a: 81 7d ec 00 04 00 00 cmpl $0x400,-0x14(%ebp)
-40004c71: 76 12 jbe 40004c85 <io_write+0x11d>
-40004c73: 8b 45 f4 mov -0xc(%ebp),%eax
-40004c76: 8b 40 0c mov 0xc(%eax),%eax
-40004c79: 83 ec 0c sub $0xc,%esp
-40004c7c: 50 push %eax
-40004c7d: e8 62 1f 00 00 call 40006be4 <close_shared_memory>
-40004c82: 83 c4 10 add $0x10,%esp
-40004c85: 8b 45 f8 mov -0x8(%ebp),%eax
-40004c88: 8b 65 dc mov -0x24(%ebp),%esp
-40004c8b: c9 leave
-40004c8c: c3 ret
-
-40004c8d <fwrite>:
-40004c8d: 55 push %ebp
-40004c8e: 89 e5 mov %esp,%ebp
-40004c90: 83 ec 18 sub $0x18,%esp
-40004c93: 8b 45 0c mov 0xc(%ebp),%eax
-40004c96: 0f af 45 10 imul 0x10(%ebp),%eax
-40004c9a: 89 45 fc mov %eax,-0x4(%ebp)
-40004c9d: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
-40004ca1: 74 0a je 40004cad <fwrite+0x20>
-40004ca3: 8b 45 14 mov 0x14(%ebp),%eax
-40004ca6: 8b 40 04 mov 0x4(%eax),%eax
-40004ca9: 85 c0 test %eax,%eax
-40004cab: 75 0c jne 40004cb9 <fwrite+0x2c>
-40004cad: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40004cb4: e9 a8 01 00 00 jmp 40004e61 <fwrite+0x1d4>
-40004cb9: 8b 45 14 mov 0x14(%ebp),%eax
-40004cbc: 8b 40 1d mov 0x1d(%eax),%eax
-40004cbf: 85 c0 test %eax,%eax
-40004cc1: 74 1c je 40004cdf <fwrite+0x52>
-40004cc3: 8b 45 14 mov 0x14(%ebp),%eax
-40004cc6: c7 40 1d 00 00 00 00 movl $0x0,0x1d(%eax)
-40004ccd: 8b 45 14 mov 0x14(%ebp),%eax
-40004cd0: 8b 40 21 mov 0x21(%eax),%eax
-40004cd3: 83 ec 0c sub $0xc,%esp
-40004cd6: 50 push %eax
-40004cd7: e8 d3 3c 00 00 call 400089af <free>
-40004cdc: 83 c4 10 add $0x10,%esp
-40004cdf: 8b 45 14 mov 0x14(%ebp),%eax
-40004ce2: 8b 40 10 mov 0x10(%eax),%eax
-40004ce5: 85 c0 test %eax,%eax
-40004ce7: 75 11 jne 40004cfa <fwrite+0x6d>
-40004ce9: 8b 45 14 mov 0x14(%ebp),%eax
-40004cec: 8a 40 1c mov 0x1c(%eax),%al
-40004cef: 84 c0 test %al,%al
-40004cf1: 74 07 je 40004cfa <fwrite+0x6d>
-40004cf3: 8b 45 14 mov 0x14(%ebp),%eax
-40004cf6: c6 40 1c 00 movb $0x0,0x1c(%eax)
-40004cfa: 8b 45 14 mov 0x14(%ebp),%eax
-40004cfd: 8a 40 1c mov 0x1c(%eax),%al
-40004d00: 0f b6 c0 movzbl %al,%eax
-40004d03: 89 45 ec mov %eax,-0x14(%ebp)
-40004d06: 83 7d ec 01 cmpl $0x1,-0x14(%ebp)
-40004d0a: 74 31 je 40004d3d <fwrite+0xb0>
-40004d0c: 83 7d ec 02 cmpl $0x2,-0x14(%ebp)
-40004d10: 0f 84 a9 00 00 00 je 40004dbf <fwrite+0x132>
-40004d16: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-40004d1a: 74 05 je 40004d21 <fwrite+0x94>
-40004d1c: e9 39 01 00 00 jmp 40004e5a <fwrite+0x1cd>
-40004d21: ff 75 14 pushl 0x14(%ebp)
-40004d24: ff 75 10 pushl 0x10(%ebp)
-40004d27: ff 75 0c pushl 0xc(%ebp)
-40004d2a: ff 75 08 pushl 0x8(%ebp)
-40004d2d: e8 36 fe ff ff call 40004b68 <io_write>
-40004d32: 83 c4 10 add $0x10,%esp
-40004d35: 89 45 e8 mov %eax,-0x18(%ebp)
-40004d38: e9 24 01 00 00 jmp 40004e61 <fwrite+0x1d4>
-40004d3d: 8b 45 14 mov 0x14(%ebp),%eax
-40004d40: 8b 50 14 mov 0x14(%eax),%edx
-40004d43: 8b 45 14 mov 0x14(%ebp),%eax
-40004d46: 8b 40 18 mov 0x18(%eax),%eax
-40004d49: 03 45 fc add -0x4(%ebp),%eax
-40004d4c: 39 c2 cmp %eax,%edx
-40004d4e: 73 34 jae 40004d84 <fwrite+0xf7>
-40004d50: 8b 45 14 mov 0x14(%ebp),%eax
-40004d53: 8b 40 10 mov 0x10(%eax),%eax
-40004d56: 83 ec 04 sub $0x4,%esp
-40004d59: ff 75 fc pushl -0x4(%ebp)
-40004d5c: ff 75 08 pushl 0x8(%ebp)
-40004d5f: 50 push %eax
-40004d60: e8 03 42 00 00 call 40008f68 <memcpy>
-40004d65: 83 c4 10 add $0x10,%esp
-40004d68: 8b 45 14 mov 0x14(%ebp),%eax
-40004d6b: 8b 40 18 mov 0x18(%eax),%eax
-40004d6e: 89 c2 mov %eax,%edx
-40004d70: 03 55 fc add -0x4(%ebp),%edx
-40004d73: 8b 45 14 mov 0x14(%ebp),%eax
-40004d76: 89 50 18 mov %edx,0x18(%eax)
-40004d79: 8b 45 fc mov -0x4(%ebp),%eax
-40004d7c: 89 45 e8 mov %eax,-0x18(%ebp)
-40004d7f: e9 dd 00 00 00 jmp 40004e61 <fwrite+0x1d4>
-40004d84: 83 ec 0c sub $0xc,%esp
-40004d87: ff 75 14 pushl 0x14(%ebp)
-40004d8a: e8 0f 03 00 00 call 4000509e <fflush>
-40004d8f: 83 c4 10 add $0x10,%esp
-40004d92: 83 f8 ff cmp $0xffffffff,%eax
-40004d95: 75 0c jne 40004da3 <fwrite+0x116>
-40004d97: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40004d9e: e9 be 00 00 00 jmp 40004e61 <fwrite+0x1d4>
-40004da3: ff 75 14 pushl 0x14(%ebp)
-40004da6: ff 75 10 pushl 0x10(%ebp)
-40004da9: ff 75 0c pushl 0xc(%ebp)
-40004dac: ff 75 08 pushl 0x8(%ebp)
-40004daf: e8 b4 fd ff ff call 40004b68 <io_write>
-40004db4: 83 c4 10 add $0x10,%esp
-40004db7: 89 45 e8 mov %eax,-0x18(%ebp)
-40004dba: e9 a2 00 00 00 jmp 40004e61 <fwrite+0x1d4>
-40004dbf: 8b 45 14 mov 0x14(%ebp),%eax
-40004dc2: 8b 50 14 mov 0x14(%eax),%edx
-40004dc5: 8b 45 14 mov 0x14(%ebp),%eax
-40004dc8: 8b 40 18 mov 0x18(%eax),%eax
-40004dcb: 03 45 fc add -0x4(%ebp),%eax
-40004dce: 39 c2 cmp %eax,%edx
-40004dd0: 72 17 jb 40004de9 <fwrite+0x15c>
-40004dd2: 83 ec 04 sub $0x4,%esp
-40004dd5: ff 75 fc pushl -0x4(%ebp)
-40004dd8: 6a 0a push $0xa
-40004dda: ff 75 08 pushl 0x8(%ebp)
-40004ddd: e8 3e 41 00 00 call 40008f20 <memchr>
-40004de2: 83 c4 10 add $0x10,%esp
-40004de5: 85 c0 test %eax,%eax
-40004de7: 74 35 je 40004e1e <fwrite+0x191>
-40004de9: 83 ec 0c sub $0xc,%esp
-40004dec: ff 75 14 pushl 0x14(%ebp)
-40004def: e8 aa 02 00 00 call 4000509e <fflush>
-40004df4: 83 c4 10 add $0x10,%esp
-40004df7: 83 f8 ff cmp $0xffffffff,%eax
-40004dfa: 75 09 jne 40004e05 <fwrite+0x178>
-40004dfc: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40004e03: eb 5c jmp 40004e61 <fwrite+0x1d4>
-40004e05: ff 75 14 pushl 0x14(%ebp)
-40004e08: ff 75 10 pushl 0x10(%ebp)
-40004e0b: ff 75 0c pushl 0xc(%ebp)
-40004e0e: ff 75 08 pushl 0x8(%ebp)
-40004e11: e8 52 fd ff ff call 40004b68 <io_write>
-40004e16: 83 c4 10 add $0x10,%esp
-40004e19: 89 45 e8 mov %eax,-0x18(%ebp)
-40004e1c: eb 43 jmp 40004e61 <fwrite+0x1d4>
-40004e1e: 8b 45 14 mov 0x14(%ebp),%eax
-40004e21: 8b 40 10 mov 0x10(%eax),%eax
-40004e24: 89 c2 mov %eax,%edx
-40004e26: 8b 45 14 mov 0x14(%ebp),%eax
-40004e29: 8b 40 18 mov 0x18(%eax),%eax
-40004e2c: 8d 04 02 lea (%edx,%eax,1),%eax
-40004e2f: 83 ec 04 sub $0x4,%esp
-40004e32: ff 75 fc pushl -0x4(%ebp)
-40004e35: ff 75 08 pushl 0x8(%ebp)
-40004e38: 50 push %eax
-40004e39: e8 2a 41 00 00 call 40008f68 <memcpy>
-40004e3e: 83 c4 10 add $0x10,%esp
-40004e41: 8b 45 14 mov 0x14(%ebp),%eax
-40004e44: 8b 40 18 mov 0x18(%eax),%eax
-40004e47: 89 c2 mov %eax,%edx
-40004e49: 03 55 fc add -0x4(%ebp),%edx
-40004e4c: 8b 45 14 mov 0x14(%ebp),%eax
-40004e4f: 89 50 18 mov %edx,0x18(%eax)
-40004e52: 8b 45 fc mov -0x4(%ebp),%eax
-40004e55: 89 45 e8 mov %eax,-0x18(%ebp)
-40004e58: eb 07 jmp 40004e61 <fwrite+0x1d4>
-40004e5a: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40004e61: 8b 45 e8 mov -0x18(%ebp),%eax
-40004e64: c9 leave
-40004e65: c3 ret
-
-40004e66 <fputc>:
-40004e66: 55 push %ebp
-40004e67: 89 e5 mov %esp,%ebp
-40004e69: 83 ec 18 sub $0x18,%esp
-40004e6c: 8b 45 08 mov 0x8(%ebp),%eax
-40004e6f: 88 45 ff mov %al,-0x1(%ebp)
-40004e72: ff 75 0c pushl 0xc(%ebp)
-40004e75: 6a 01 push $0x1
-40004e77: 6a 01 push $0x1
-40004e79: 8d 45 ff lea -0x1(%ebp),%eax
-40004e7c: 50 push %eax
-40004e7d: e8 0b fe ff ff call 40004c8d <fwrite>
-40004e82: 83 c4 10 add $0x10,%esp
-40004e85: 83 f8 01 cmp $0x1,%eax
-40004e88: 75 08 jne 40004e92 <fputc+0x2c>
-40004e8a: 8b 45 08 mov 0x8(%ebp),%eax
-40004e8d: 89 45 ec mov %eax,-0x14(%ebp)
-40004e90: eb 07 jmp 40004e99 <fputc+0x33>
-40004e92: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004e99: 8b 45 ec mov -0x14(%ebp),%eax
-40004e9c: c9 leave
-40004e9d: c3 ret
-
-40004e9e <fputs>:
-40004e9e: 55 push %ebp
-40004e9f: 89 e5 mov %esp,%ebp
-40004ea1: 53 push %ebx
-40004ea2: 83 ec 04 sub $0x4,%esp
-40004ea5: 83 ec 0c sub $0xc,%esp
-40004ea8: ff 75 08 pushl 0x8(%ebp)
-40004eab: e8 c4 43 00 00 call 40009274 <strlen>
-40004eb0: 83 c4 10 add $0x10,%esp
-40004eb3: ff 75 0c pushl 0xc(%ebp)
-40004eb6: 50 push %eax
-40004eb7: 6a 01 push $0x1
-40004eb9: ff 75 08 pushl 0x8(%ebp)
-40004ebc: e8 cc fd ff ff call 40004c8d <fwrite>
-40004ec1: 83 c4 10 add $0x10,%esp
-40004ec4: 89 c3 mov %eax,%ebx
-40004ec6: 83 ec 0c sub $0xc,%esp
-40004ec9: ff 75 08 pushl 0x8(%ebp)
-40004ecc: e8 a3 43 00 00 call 40009274 <strlen>
-40004ed1: 83 c4 10 add $0x10,%esp
-40004ed4: 39 c3 cmp %eax,%ebx
-40004ed6: 75 09 jne 40004ee1 <fputs+0x43>
-40004ed8: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-40004edf: eb 07 jmp 40004ee8 <fputs+0x4a>
-40004ee1: c7 45 f8 ff ff ff ff movl $0xffffffff,-0x8(%ebp)
-40004ee8: 8b 45 f8 mov -0x8(%ebp),%eax
-40004eeb: 8b 5d fc mov -0x4(%ebp),%ebx
-40004eee: c9 leave
-40004eef: c3 ret
-
-40004ef0 <fseek>:
-40004ef0: 55 push %ebp
-40004ef1: 89 e5 mov %esp,%ebp
-40004ef3: 83 ec 18 sub $0x18,%esp
-40004ef6: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40004efa: 74 0a je 40004f06 <fseek+0x16>
-40004efc: 8b 45 08 mov 0x8(%ebp),%eax
-40004eff: 8b 40 04 mov 0x4(%eax),%eax
-40004f02: 85 c0 test %eax,%eax
-40004f04: 75 09 jne 40004f0f <fseek+0x1f>
-40004f06: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004f0d: eb 57 jmp 40004f66 <fseek+0x76>
-40004f0f: 8b 45 08 mov 0x8(%ebp),%eax
-40004f12: 8b 40 1d mov 0x1d(%eax),%eax
-40004f15: 85 c0 test %eax,%eax
-40004f17: 74 1c je 40004f35 <fseek+0x45>
-40004f19: 8b 45 08 mov 0x8(%ebp),%eax
-40004f1c: c7 40 1d 00 00 00 00 movl $0x0,0x1d(%eax)
-40004f23: 8b 45 08 mov 0x8(%ebp),%eax
-40004f26: 8b 40 21 mov 0x21(%eax),%eax
-40004f29: 83 ec 0c sub $0xc,%esp
-40004f2c: 50 push %eax
-40004f2d: e8 7d 3a 00 00 call 400089af <free>
-40004f32: 83 c4 10 add $0x10,%esp
-40004f35: 8b 45 08 mov 0x8(%ebp),%eax
-40004f38: 8b 00 mov (%eax),%eax
-40004f3a: 89 45 f4 mov %eax,-0xc(%ebp)
-40004f3d: 8b 45 0c mov 0xc(%ebp),%eax
-40004f40: 89 45 f8 mov %eax,-0x8(%ebp)
-40004f43: 8b 45 10 mov 0x10(%ebp),%eax
-40004f46: 89 45 fc mov %eax,-0x4(%ebp)
-40004f49: 8d 55 f4 lea -0xc(%ebp),%edx
-40004f4c: 8b 45 08 mov 0x8(%ebp),%eax
-40004f4f: 8b 40 04 mov 0x4(%eax),%eax
-40004f52: 52 push %edx
-40004f53: 6a 0c push $0xc
-40004f55: 68 73 99 00 40 push $0x40009973
-40004f5a: 50 push %eax
-40004f5b: e8 5d e5 ff ff call 400034bd <rpc_get_dword>
-40004f60: 83 c4 10 add $0x10,%esp
-40004f63: 89 45 ec mov %eax,-0x14(%ebp)
-40004f66: 8b 45 ec mov -0x14(%ebp),%eax
-40004f69: c9 leave
-40004f6a: c3 ret
-
-40004f6b <ftell>:
-40004f6b: 55 push %ebp
-40004f6c: 89 e5 mov %esp,%ebp
-40004f6e: 83 ec 18 sub $0x18,%esp
-40004f71: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40004f75: 74 0a je 40004f81 <ftell+0x16>
-40004f77: 8b 45 08 mov 0x8(%ebp),%eax
-40004f7a: 8b 40 04 mov 0x4(%eax),%eax
-40004f7d: 85 c0 test %eax,%eax
-40004f7f: 75 09 jne 40004f8a <ftell+0x1f>
-40004f81: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-40004f88: eb 71 jmp 40004ffb <ftell+0x90>
-40004f8a: 8b 45 08 mov 0x8(%ebp),%eax
-40004f8d: 8b 00 mov (%eax),%eax
-40004f8f: 89 45 f8 mov %eax,-0x8(%ebp)
-40004f92: 83 ec 0c sub $0xc,%esp
-40004f95: ff 75 08 pushl 0x8(%ebp)
-40004f98: e8 01 01 00 00 call 4000509e <fflush>
-40004f9d: 83 c4 10 add $0x10,%esp
-40004fa0: 8d 55 f8 lea -0x8(%ebp),%edx
-40004fa3: 8b 45 08 mov 0x8(%ebp),%eax
-40004fa6: 8b 40 04 mov 0x4(%eax),%eax
-40004fa9: 52 push %edx
-40004faa: 6a 04 push $0x4
-40004fac: 68 7c 99 00 40 push $0x4000997c
-40004fb1: 50 push %eax
-40004fb2: e8 76 e6 ff ff call 4000362d <rpc_get_response>
-40004fb7: 83 c4 10 add $0x10,%esp
-40004fba: 89 45 fc mov %eax,-0x4(%ebp)
-40004fbd: 8b 45 fc mov -0x4(%ebp),%eax
-40004fc0: 8b 40 0c mov 0xc(%eax),%eax
-40004fc3: 83 ec 04 sub $0x4,%esp
-40004fc6: 6a 04 push $0x4
-40004fc8: 50 push %eax
-40004fc9: 8d 45 f4 lea -0xc(%ebp),%eax
-40004fcc: 50 push %eax
-40004fcd: e8 96 3f 00 00 call 40008f68 <memcpy>
-40004fd2: 83 c4 10 add $0x10,%esp
-40004fd5: 8b 45 fc mov -0x4(%ebp),%eax
-40004fd8: 8b 40 0c mov 0xc(%eax),%eax
-40004fdb: 83 ec 0c sub $0xc,%esp
-40004fde: 50 push %eax
-40004fdf: e8 cb 39 00 00 call 400089af <free>
-40004fe4: 83 c4 10 add $0x10,%esp
-40004fe7: 83 ec 0c sub $0xc,%esp
-40004fea: ff 75 fc pushl -0x4(%ebp)
-40004fed: e8 bd 39 00 00 call 400089af <free>
-40004ff2: 83 c4 10 add $0x10,%esp
-40004ff5: 8b 45 f4 mov -0xc(%ebp),%eax
-40004ff8: 89 45 ec mov %eax,-0x14(%ebp)
-40004ffb: 8b 45 ec mov -0x14(%ebp),%eax
-40004ffe: c9 leave
-40004fff: c3 ret
-
-40005000 <feof>:
-40005000: 55 push %ebp
-40005001: 89 e5 mov %esp,%ebp
-40005003: 83 ec 18 sub $0x18,%esp
-40005006: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-4000500a: 74 0a je 40005016 <feof+0x16>
-4000500c: 8b 45 08 mov 0x8(%ebp),%eax
-4000500f: 8b 40 04 mov 0x4(%eax),%eax
-40005012: 85 c0 test %eax,%eax
-40005014: 75 09 jne 4000501f <feof+0x1f>
-40005016: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000501d: eb 46 jmp 40005065 <feof+0x65>
-4000501f: 8b 45 08 mov 0x8(%ebp),%eax
-40005022: 8b 40 1d mov 0x1d(%eax),%eax
-40005025: 85 c0 test %eax,%eax
-40005027: 74 09 je 40005032 <feof+0x32>
-40005029: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40005030: eb 33 jmp 40005065 <feof+0x65>
-40005032: 8b 45 08 mov 0x8(%ebp),%eax
-40005035: 8b 00 mov (%eax),%eax
-40005037: 89 45 fc mov %eax,-0x4(%ebp)
-4000503a: 83 ec 0c sub $0xc,%esp
-4000503d: ff 75 08 pushl 0x8(%ebp)
-40005040: e8 59 00 00 00 call 4000509e <fflush>
-40005045: 83 c4 10 add $0x10,%esp
-40005048: 8d 55 fc lea -0x4(%ebp),%edx
-4000504b: 8b 45 08 mov 0x8(%ebp),%eax
-4000504e: 8b 40 04 mov 0x4(%eax),%eax
-40005051: 52 push %edx
-40005052: 6a 04 push $0x4
-40005054: 68 85 99 00 40 push $0x40009985
-40005059: 50 push %eax
-4000505a: e8 5e e4 ff ff call 400034bd <rpc_get_dword>
-4000505f: 83 c4 10 add $0x10,%esp
-40005062: 89 45 ec mov %eax,-0x14(%ebp)
-40005065: 8b 45 ec mov -0x14(%ebp),%eax
-40005068: c9 leave
-40005069: c3 ret
-
-4000506a <ferror>:
-4000506a: 55 push %ebp
-4000506b: 89 e5 mov %esp,%ebp
-4000506d: b8 00 00 00 00 mov $0x0,%eax
-40005072: c9 leave
-40005073: c3 ret
-
-40005074 <clearerr>:
-40005074: 55 push %ebp
-40005075: 89 e5 mov %esp,%ebp
-40005077: c9 leave
-40005078: c3 ret
-
-40005079 <rewind>:
-40005079: 55 push %ebp
-4000507a: 89 e5 mov %esp,%ebp
-4000507c: 83 ec 08 sub $0x8,%esp
-4000507f: 83 ec 04 sub $0x4,%esp
-40005082: 6a 00 push $0x0
-40005084: 6a 00 push $0x0
-40005086: ff 75 08 pushl 0x8(%ebp)
-40005089: e8 62 fe ff ff call 40004ef0 <fseek>
-4000508e: 83 c4 10 add $0x10,%esp
-40005091: ff 75 08 pushl 0x8(%ebp)
-40005094: e8 db ff ff ff call 40005074 <clearerr>
-40005099: 83 c4 04 add $0x4,%esp
-4000509c: c9 leave
-4000509d: c3 ret
-
-4000509e <fflush>:
-4000509e: 55 push %ebp
-4000509f: 89 e5 mov %esp,%ebp
-400050a1: 83 ec 18 sub $0x18,%esp
-400050a4: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-400050a8: 74 0a je 400050b4 <fflush+0x16>
-400050aa: 8b 45 08 mov 0x8(%ebp),%eax
-400050ad: 8b 40 04 mov 0x4(%eax),%eax
-400050b0: 85 c0 test %eax,%eax
-400050b2: 75 09 jne 400050bd <fflush+0x1f>
-400050b4: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-400050bb: eb 7e jmp 4000513b <fflush+0x9d>
-400050bd: 8b 45 08 mov 0x8(%ebp),%eax
-400050c0: 8a 40 1c mov 0x1c(%eax),%al
-400050c3: 84 c0 test %al,%al
-400050c5: 74 1e je 400050e5 <fflush+0x47>
-400050c7: 8b 45 08 mov 0x8(%ebp),%eax
-400050ca: 8b 40 10 mov 0x10(%eax),%eax
-400050cd: 85 c0 test %eax,%eax
-400050cf: 74 14 je 400050e5 <fflush+0x47>
-400050d1: 8b 45 08 mov 0x8(%ebp),%eax
-400050d4: 8b 40 14 mov 0x14(%eax),%eax
-400050d7: 85 c0 test %eax,%eax
-400050d9: 74 0a je 400050e5 <fflush+0x47>
-400050db: 8b 45 08 mov 0x8(%ebp),%eax
-400050de: 8b 40 18 mov 0x18(%eax),%eax
-400050e1: 85 c0 test %eax,%eax
-400050e3: 75 09 jne 400050ee <fflush+0x50>
-400050e5: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400050ec: eb 4d jmp 4000513b <fflush+0x9d>
-400050ee: 8b 45 08 mov 0x8(%ebp),%eax
-400050f1: 8b 50 18 mov 0x18(%eax),%edx
-400050f4: 8b 45 08 mov 0x8(%ebp),%eax
-400050f7: 8b 40 10 mov 0x10(%eax),%eax
-400050fa: ff 75 08 pushl 0x8(%ebp)
-400050fd: 52 push %edx
-400050fe: 6a 01 push $0x1
-40005100: 50 push %eax
-40005101: e8 62 fa ff ff call 40004b68 <io_write>
-40005106: 83 c4 10 add $0x10,%esp
-40005109: 89 45 fc mov %eax,-0x4(%ebp)
-4000510c: 8b 45 08 mov 0x8(%ebp),%eax
-4000510f: 8b 40 18 mov 0x18(%eax),%eax
-40005112: 3b 45 fc cmp -0x4(%ebp),%eax
-40005115: 75 13 jne 4000512a <fflush+0x8c>
-40005117: 8b 45 08 mov 0x8(%ebp),%eax
-4000511a: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-40005121: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40005128: eb 11 jmp 4000513b <fflush+0x9d>
-4000512a: 8b 45 08 mov 0x8(%ebp),%eax
-4000512d: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-40005134: c7 45 ec ff ff ff ff movl $0xffffffff,-0x14(%ebp)
-4000513b: 8b 45 ec mov -0x14(%ebp),%eax
-4000513e: c9 leave
-4000513f: c3 ret
-
-40005140 <fpurge>:
-40005140: 55 push %ebp
-40005141: 89 e5 mov %esp,%ebp
-40005143: 8b 45 08 mov 0x8(%ebp),%eax
-40005146: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-4000514d: b8 00 00 00 00 mov $0x0,%eax
-40005152: c9 leave
-40005153: c3 ret
-
-40005154 <setvbuf>:
-40005154: 55 push %ebp
-40005155: 89 e5 mov %esp,%ebp
-40005157: 83 ec 08 sub $0x8,%esp
-4000515a: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-4000515e: 75 0c jne 4000516c <setvbuf+0x18>
-40005160: c7 45 fc ff ff ff ff movl $0xffffffff,-0x4(%ebp)
-40005167: e9 be 00 00 00 jmp 4000522a <setvbuf+0xd6>
-4000516c: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40005170: 75 1d jne 4000518f <setvbuf+0x3b>
-40005172: 8b 45 08 mov 0x8(%ebp),%eax
-40005175: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
-4000517c: 8b 45 08 mov 0x8(%ebp),%eax
-4000517f: c6 40 1c 00 movb $0x0,0x1c(%eax)
-40005183: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-4000518a: e9 9b 00 00 00 jmp 4000522a <setvbuf+0xd6>
-4000518f: 8b 45 10 mov 0x10(%ebp),%eax
-40005192: 89 45 f8 mov %eax,-0x8(%ebp)
-40005195: 83 7d f8 02 cmpl $0x2,-0x8(%ebp)
-40005199: 74 35 je 400051d0 <setvbuf+0x7c>
-4000519b: 83 7d f8 03 cmpl $0x3,-0x8(%ebp)
-4000519f: 74 54 je 400051f5 <setvbuf+0xa1>
-400051a1: 83 7d f8 01 cmpl $0x1,-0x8(%ebp)
-400051a5: 74 02 je 400051a9 <setvbuf+0x55>
-400051a7: eb 71 jmp 4000521a <setvbuf+0xc6>
-400051a9: 8b 45 08 mov 0x8(%ebp),%eax
-400051ac: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
-400051b3: 8b 45 08 mov 0x8(%ebp),%eax
-400051b6: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-400051bd: 8b 45 08 mov 0x8(%ebp),%eax
-400051c0: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax)
-400051c7: 8b 45 08 mov 0x8(%ebp),%eax
-400051ca: c6 40 1c 00 movb $0x0,0x1c(%eax)
-400051ce: eb 53 jmp 40005223 <setvbuf+0xcf>
-400051d0: 8b 55 08 mov 0x8(%ebp),%edx
-400051d3: 8b 45 0c mov 0xc(%ebp),%eax
-400051d6: 89 42 10 mov %eax,0x10(%edx)
-400051d9: 8b 45 08 mov 0x8(%ebp),%eax
-400051dc: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-400051e3: 8b 55 08 mov 0x8(%ebp),%edx
-400051e6: 8b 45 14 mov 0x14(%ebp),%eax
-400051e9: 89 42 14 mov %eax,0x14(%edx)
-400051ec: 8b 45 08 mov 0x8(%ebp),%eax
-400051ef: c6 40 1c 01 movb $0x1,0x1c(%eax)
-400051f3: eb 2e jmp 40005223 <setvbuf+0xcf>
-400051f5: 8b 55 08 mov 0x8(%ebp),%edx
-400051f8: 8b 45 0c mov 0xc(%ebp),%eax
-400051fb: 89 42 10 mov %eax,0x10(%edx)
-400051fe: 8b 45 08 mov 0x8(%ebp),%eax
-40005201: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-40005208: 8b 55 08 mov 0x8(%ebp),%edx
-4000520b: 8b 45 14 mov 0x14(%ebp),%eax
-4000520e: 89 42 14 mov %eax,0x14(%edx)
-40005211: 8b 45 08 mov 0x8(%ebp),%eax
-40005214: c6 40 1c 02 movb $0x2,0x1c(%eax)
-40005218: eb 09 jmp 40005223 <setvbuf+0xcf>
-4000521a: c7 45 fc ff ff ff ff movl $0xffffffff,-0x4(%ebp)
-40005221: eb 07 jmp 4000522a <setvbuf+0xd6>
-40005223: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-4000522a: 8b 45 fc mov -0x4(%ebp),%eax
-4000522d: c9 leave
-4000522e: c3 ret
-
-4000522f <remove>:
-4000522f: 55 push %ebp
-40005230: 89 e5 mov %esp,%ebp
-40005232: 83 ec 08 sub $0x8,%esp
-40005235: 83 ec 08 sub $0x8,%esp
-40005238: ff 75 08 pushl 0x8(%ebp)
-4000523b: 68 90 99 00 40 push $0x40009990
-40005240: e8 f4 10 00 00 call 40006339 <printf>
-40005245: 83 c4 10 add $0x10,%esp
-40005248: b8 00 00 00 00 mov $0x0,%eax
-4000524d: c9 leave
-4000524e: c3 ret
-
-4000524f <tmpfile>:
-4000524f: 55 push %ebp
-40005250: 89 e5 mov %esp,%ebp
-40005252: 83 ec 08 sub $0x8,%esp
-40005255: 83 ec 08 sub $0x8,%esp
-40005258: 68 d6 99 00 40 push $0x400099d6
-4000525d: 68 da 99 00 40 push $0x400099da
-40005262: e8 71 f2 ff ff call 400044d8 <fopen>
-40005267: 83 c4 10 add $0x10,%esp
-4000526a: c9 leave
-4000526b: c3 ret
-
-4000526c <divmod>:
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
-4000526c: 55 push %ebp
-4000526d: 89 e5 mov %esp,%ebp
-4000526f: 53 push %ebx
-40005270: 83 ec 24 sub $0x24,%esp
-40005273: 8b 45 08 mov 0x8(%ebp),%eax
-40005276: 89 45 e0 mov %eax,-0x20(%ebp)
-40005279: 8b 45 0c mov 0xc(%ebp),%eax
-4000527c: 89 45 e4 mov %eax,-0x1c(%ebp)
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-4000527f: 8b 45 10 mov 0x10(%ebp),%eax
-40005282: ba 00 00 00 00 mov $0x0,%edx
-40005287: 52 push %edx
-40005288: 50 push %eax
-40005289: ff 75 e4 pushl -0x1c(%ebp)
-4000528c: ff 75 e0 pushl -0x20(%ebp)
-4000528f: e8 c8 41 00 00 call 4000945c <__udivdi3>
-40005294: 83 c4 10 add $0x10,%esp
-40005297: 89 45 e8 mov %eax,-0x18(%ebp)
-4000529a: 89 55 ec mov %edx,-0x14(%ebp)
- .protocol = PIO,
-4000529d: 8b 45 10 mov 0x10(%ebp),%eax
-400052a0: ba 00 00 00 00 mov $0x0,%edx
-400052a5: 8b 4d e0 mov -0x20(%ebp),%ecx
-400052a8: 8b 5d e4 mov -0x1c(%ebp),%ebx
-400052ab: 52 push %edx
-400052ac: 50 push %eax
-400052ad: 53 push %ebx
-400052ae: 51 push %ecx
-400052af: e8 d0 42 00 00 call 40009584 <__umoddi3>
-400052b4: 83 c4 10 add $0x10,%esp
-400052b7: 89 45 f4 mov %eax,-0xc(%ebp)
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-400052ba: 83 7d 14 00 cmpl $0x0,0x14(%ebp)
-400052be: 74 08 je 400052c8 <divmod+0x5c>
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-400052c0: 8b 55 14 mov 0x14(%ebp),%edx
-400052c3: 8b 45 f4 mov -0xc(%ebp),%eax
-400052c6: 89 02 mov %eax,(%edx)
-
- .error = 0
- };
-400052c8: 8b 45 e8 mov -0x18(%ebp),%eax
-400052cb: 8b 55 ec mov -0x14(%ebp),%edx
-
-400052ce: 8b 5d fc mov -0x4(%ebp),%ebx
-400052d1: c9 leave
-400052d2: c3 ret
-
-400052d3 <ulltoa>:
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
- return 1;
-400052d3: 55 push %ebp
-400052d4: 89 e5 mov %esp,%ebp
-400052d6: 83 ec 38 sub $0x38,%esp
-400052d9: 8b 45 08 mov 0x8(%ebp),%eax
-400052dc: 89 45 d8 mov %eax,-0x28(%ebp)
-400052df: 8b 45 0c mov 0xc(%ebp),%eax
-400052e2: 89 45 dc mov %eax,-0x24(%ebp)
-}
-400052e5: 8b 45 10 mov 0x10(%ebp),%eax
-400052e8: 89 45 e8 mov %eax,-0x18(%ebp)
-
-400052eb: 83 7d 18 00 cmpl $0x0,0x18(%ebp)
-400052ef: 74 09 je 400052fa <ulltoa+0x27>
-400052f1: c7 45 d0 e8 99 00 40 movl $0x400099e8,-0x30(%ebp)
-400052f8: eb 07 jmp 40005301 <ulltoa+0x2e>
-400052fa: c7 45 d0 0c 9a 00 40 movl $0x40009a0c,-0x30(%ebp)
-40005301: 8b 45 d0 mov -0x30(%ebp),%eax
-40005304: 89 45 ec mov %eax,-0x14(%ebp)
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-40005307: 83 7d 14 01 cmpl $0x1,0x14(%ebp)
-4000530b: 76 06 jbe 40005313 <ulltoa+0x40>
-4000530d: 83 7d 14 24 cmpl $0x24,0x14(%ebp)
-40005311: 76 0b jbe 4000531e <ulltoa+0x4b>
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40005313: 8b 45 10 mov 0x10(%ebp),%eax
-40005316: 89 45 d4 mov %eax,-0x2c(%ebp)
-40005319: e9 8b 00 00 00 jmp 400053a9 <ulltoa+0xd6>
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-4000531e: 8b 45 d8 mov -0x28(%ebp),%eax
-40005321: 8b 55 dc mov -0x24(%ebp),%edx
-40005324: 89 45 f0 mov %eax,-0x10(%ebp)
-40005327: 89 55 f4 mov %edx,-0xc(%ebp)
- int result = 1;
-4000532a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-40005331: ff 45 fc incl -0x4(%ebp)
- uint16_t current_count;
-40005334: 6a 00 push $0x0
-40005336: ff 75 14 pushl 0x14(%ebp)
-40005339: ff 75 f4 pushl -0xc(%ebp)
-4000533c: ff 75 f0 pushl -0x10(%ebp)
-4000533f: e8 28 ff ff ff call 4000526c <divmod>
-40005344: 83 c4 10 add $0x10,%esp
-40005347: 89 45 f0 mov %eax,-0x10(%ebp)
-4000534a: 89 55 f4 mov %edx,-0xc(%ebp)
- void* current_buffer = buffer;
- uint64_t lba = start;
-4000534d: 8b 45 f0 mov -0x10(%ebp),%eax
-40005350: 0b 45 f4 or -0xc(%ebp),%eax
-40005353: 85 c0 test %eax,%eax
-40005355: 75 da jne 40005331 <ulltoa+0x5e>
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-40005357: 8b 45 fc mov -0x4(%ebp),%eax
-4000535a: 01 45 e8 add %eax,-0x18(%ebp)
-
-4000535d: 8b 45 e8 mov -0x18(%ebp),%eax
-40005360: c6 00 00 movb $0x0,(%eax)
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40005363: 8b 45 d8 mov -0x28(%ebp),%eax
-40005366: 8b 55 dc mov -0x24(%ebp),%edx
-40005369: 89 45 f0 mov %eax,-0x10(%ebp)
-4000536c: 89 55 f4 mov %edx,-0xc(%ebp)
- if (count_left > 256) {
- current_count = 256;
- } else {
-4000536f: 8d 45 e4 lea -0x1c(%ebp),%eax
-40005372: 50 push %eax
-40005373: ff 75 14 pushl 0x14(%ebp)
-40005376: ff 75 f4 pushl -0xc(%ebp)
-40005379: ff 75 f0 pushl -0x10(%ebp)
-4000537c: e8 eb fe ff ff call 4000526c <divmod>
-40005381: 83 c4 10 add $0x10,%esp
-40005384: 89 45 f0 mov %eax,-0x10(%ebp)
-40005387: 89 55 f4 mov %edx,-0xc(%ebp)
- current_count = count_left;
-4000538a: ff 4d e8 decl -0x18(%ebp)
-4000538d: 8b 45 e4 mov -0x1c(%ebp),%eax
-40005390: 03 45 ec add -0x14(%ebp),%eax
-40005393: 8a 10 mov (%eax),%dl
-40005395: 8b 45 e8 mov -0x18(%ebp),%eax
-40005398: 88 10 mov %dl,(%eax)
- }
-
-4000539a: ff 4d fc decl -0x4(%ebp)
-4000539d: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400053a1: 75 cc jne 4000536f <ulltoa+0x9c>
- // Request vorbereiten
- request.dev = dev;
-400053a3: 8b 45 10 mov 0x10(%ebp),%eax
-400053a6: 89 45 d4 mov %eax,-0x2c(%ebp)
-400053a9: 8b 45 d4 mov -0x2c(%ebp),%eax
- // TODO: DMA, UltraDMA...
-400053ac: c9 leave
-400053ad: c3 ret
-
-400053ae <jprintf_putc>:
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
-400053ae: 55 push %ebp
-400053af: 89 e5 mov %esp,%ebp
-400053b1: 83 ec 08 sub $0x8,%esp
-400053b4: 8b 45 0c mov 0xc(%ebp),%eax
-400053b7: 88 45 fc mov %al,-0x4(%ebp)
- request.registers.ata.lba = lba;
-400053ba: 8b 45 08 mov 0x8(%ebp),%eax
-400053bd: 8b 00 mov (%eax),%eax
-400053bf: 85 c0 test %eax,%eax
-400053c1: 74 1e je 400053e1 <jprintf_putc+0x33>
-
- request.block_count = current_count;
-400053c3: 8b 45 08 mov 0x8(%ebp),%eax
-400053c6: 8b 08 mov (%eax),%ecx
-400053c8: 0f be 55 fc movsbl -0x4(%ebp),%edx
-400053cc: 8b 45 08 mov 0x8(%ebp),%eax
-400053cf: 8b 40 08 mov 0x8(%eax),%eax
-400053d2: 83 ec 08 sub $0x8,%esp
-400053d5: 52 push %edx
-400053d6: 50 push %eax
-400053d7: ff d1 call *%ecx
-400053d9: 83 c4 10 add $0x10,%esp
-400053dc: 89 45 f8 mov %eax,-0x8(%ebp)
-400053df: eb 07 jmp 400053e8 <jprintf_putc+0x3a>
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-400053e1: c7 45 f8 01 00 00 00 movl $0x1,-0x8(%ebp)
-400053e8: 8b 45 f8 mov -0x8(%ebp),%eax
-
-400053eb: c9 leave
-400053ec: c3 ret
-
-400053ed <jprintf_putsn>:
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
-400053ed: 55 push %ebp
-400053ee: 89 e5 mov %esp,%ebp
-400053f0: 83 ec 18 sub $0x18,%esp
- lba += current_count;
-400053f3: 8b 45 08 mov 0x8(%ebp),%eax
-400053f6: 8b 40 04 mov 0x4(%eax),%eax
-400053f9: 85 c0 test %eax,%eax
-400053fb: 74 20 je 4000541d <jprintf_putsn+0x30>
- }
-
-400053fd: 8b 45 08 mov 0x8(%ebp),%eax
-40005400: 8b 50 04 mov 0x4(%eax),%edx
-40005403: 8b 45 08 mov 0x8(%ebp),%eax
-40005406: 8b 40 08 mov 0x8(%eax),%eax
-40005409: 83 ec 04 sub $0x4,%esp
-4000540c: ff 75 10 pushl 0x10(%ebp)
-4000540f: ff 75 0c pushl 0xc(%ebp)
-40005412: 50 push %eax
-40005413: ff d2 call *%edx
-40005415: 83 c4 10 add $0x10,%esp
-40005418: 89 45 ec mov %eax,-0x14(%ebp)
-4000541b: eb 50 jmp 4000546d <jprintf_putsn+0x80>
- return result;
-}
-
-4000541d: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40005424: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-4000542b: eb 20 jmp 4000544d <jprintf_putsn+0x60>
-4000542d: 8b 45 f8 mov -0x8(%ebp),%eax
-40005430: 03 45 0c add 0xc(%ebp),%eax
-40005433: 8a 00 mov (%eax),%al
-40005435: 0f be c0 movsbl %al,%eax
-40005438: 83 ec 08 sub $0x8,%esp
-4000543b: 50 push %eax
-4000543c: ff 75 08 pushl 0x8(%ebp)
-4000543f: e8 6a ff ff ff call 400053ae <jprintf_putc>
-40005444: 83 c4 10 add $0x10,%esp
-40005447: 01 45 fc add %eax,-0x4(%ebp)
-4000544a: ff 45 f8 incl -0x8(%ebp)
-
-4000544d: 8b 45 f8 mov -0x8(%ebp),%eax
-40005450: 03 45 0c add 0xc(%ebp),%eax
-40005453: 8a 00 mov (%eax),%al
-40005455: 84 c0 test %al,%al
-40005457: 74 0e je 40005467 <jprintf_putsn+0x7a>
-40005459: 8b 45 f8 mov -0x8(%ebp),%eax
-4000545c: 3b 45 10 cmp 0x10(%ebp),%eax
-4000545f: 7c cc jl 4000542d <jprintf_putsn+0x40>
-40005461: 83 7d 10 ff cmpl $0xffffffff,0x10(%ebp)
-40005465: 74 c6 je 4000542d <jprintf_putsn+0x40>
-40005467: 8b 45 fc mov -0x4(%ebp),%eax
-4000546a: 89 45 ec mov %eax,-0x14(%ebp)
-4000546d: 8b 45 ec mov -0x14(%ebp),%eax
-40005470: c9 leave
-40005471: c3 ret
-
-40005472 <jvprintf>:
-40005472: 55 push %ebp
-40005473: 89 e5 mov %esp,%ebp
-40005475: 81 ec 38 01 00 00 sub $0x138,%esp
-4000547b: c7 85 58 ff ff ff 00 movl $0x0,-0xa8(%ebp)
-40005482: 00 00 00
-40005485: e9 e3 0d 00 00 jmp 4000626d <jvprintf+0xdfb>
-4000548a: 8b 45 0c mov 0xc(%ebp),%eax
-4000548d: 89 85 54 ff ff ff mov %eax,-0xac(%ebp)
-40005493: eb 07 jmp 4000549c <jvprintf+0x2a>
-40005495: 8b 45 0c mov 0xc(%ebp),%eax
-40005498: 40 inc %eax
-40005499: 89 45 0c mov %eax,0xc(%ebp)
-4000549c: 8b 45 0c mov 0xc(%ebp),%eax
-4000549f: 8a 00 mov (%eax),%al
-400054a1: 3c 25 cmp $0x25,%al
-400054a3: 74 09 je 400054ae <jvprintf+0x3c>
-400054a5: 8b 45 0c mov 0xc(%ebp),%eax
-400054a8: 8a 00 mov (%eax),%al
-400054aa: 84 c0 test %al,%al
-400054ac: 75 e7 jne 40005495 <jvprintf+0x23>
-400054ae: 8b 45 0c mov 0xc(%ebp),%eax
-400054b1: 89 c2 mov %eax,%edx
-400054b3: 8b 85 54 ff ff ff mov -0xac(%ebp),%eax
-400054b9: 89 d1 mov %edx,%ecx
-400054bb: 29 c1 sub %eax,%ecx
-400054bd: 89 c8 mov %ecx,%eax
-400054bf: 83 ec 04 sub $0x4,%esp
-400054c2: 50 push %eax
-400054c3: ff b5 54 ff ff ff pushl -0xac(%ebp)
-400054c9: ff 75 08 pushl 0x8(%ebp)
-400054cc: e8 1c ff ff ff call 400053ed <jprintf_putsn>
-400054d1: 83 c4 10 add $0x10,%esp
-400054d4: 89 85 6c ff ff ff mov %eax,-0x94(%ebp)
-400054da: 83 bd 6c ff ff ff 00 cmpl $0x0,-0x94(%ebp)
-400054e1: 79 11 jns 400054f4 <jvprintf+0x82>
-400054e3: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax
-400054e9: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-400054ef: e9 92 0d 00 00 jmp 40006286 <jvprintf+0xe14>
-400054f4: 8b 45 0c mov 0xc(%ebp),%eax
-400054f7: 89 c2 mov %eax,%edx
-400054f9: 8b 85 54 ff ff ff mov -0xac(%ebp),%eax
-400054ff: 89 d1 mov %edx,%ecx
-40005501: 29 c1 sub %eax,%ecx
-40005503: 89 c8 mov %ecx,%eax
-40005505: 83 f8 ff cmp $0xffffffff,%eax
-40005508: 74 32 je 4000553c <jvprintf+0xca>
-4000550a: 8b 45 0c mov 0xc(%ebp),%eax
-4000550d: 89 c2 mov %eax,%edx
-4000550f: 8b 85 54 ff ff ff mov -0xac(%ebp),%eax
-40005515: 89 d1 mov %edx,%ecx
-40005517: 29 c1 sub %eax,%ecx
-40005519: 89 c8 mov %ecx,%eax
-4000551b: 3b 85 6c ff ff ff cmp -0x94(%ebp),%eax
-40005521: 74 19 je 4000553c <jvprintf+0xca>
-40005523: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax
-40005529: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-4000552f: 01 c2 add %eax,%edx
-40005531: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005537: e9 4a 0d 00 00 jmp 40006286 <jvprintf+0xe14>
-4000553c: 8b 85 6c ff ff ff mov -0x94(%ebp),%eax
-40005542: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005548: 8b 45 0c mov 0xc(%ebp),%eax
-4000554b: 8a 00 mov (%eax),%al
-4000554d: 84 c0 test %al,%al
-4000554f: 0f 84 25 0d 00 00 je 4000627a <jvprintf+0xe08>
-40005555: 8b 45 0c mov 0xc(%ebp),%eax
-40005558: 40 inc %eax
-40005559: 89 45 0c mov %eax,0xc(%ebp)
-4000555c: 8b 45 0c mov 0xc(%ebp),%eax
-4000555f: 8a 00 mov (%eax),%al
-40005561: 3c 25 cmp $0x25,%al
-40005563: 75 69 jne 400055ce <jvprintf+0x15c>
-40005565: 8b 45 0c mov 0xc(%ebp),%eax
-40005568: 8a 00 mov (%eax),%al
-4000556a: 0f be c0 movsbl %al,%eax
-4000556d: 83 ec 08 sub $0x8,%esp
-40005570: 50 push %eax
-40005571: ff 75 08 pushl 0x8(%ebp)
-40005574: e8 35 fe ff ff call 400053ae <jprintf_putc>
-40005579: 83 c4 10 add $0x10,%esp
-4000557c: 89 85 70 ff ff ff mov %eax,-0x90(%ebp)
-40005582: 83 bd 70 ff ff ff 00 cmpl $0x0,-0x90(%ebp)
-40005589: 79 11 jns 4000559c <jvprintf+0x12a>
-4000558b: 8b 8d 70 ff ff ff mov -0x90(%ebp),%ecx
-40005591: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005597: e9 ea 0c 00 00 jmp 40006286 <jvprintf+0xe14>
-4000559c: 83 bd 70 ff ff ff 00 cmpl $0x0,-0x90(%ebp)
-400055a3: 75 11 jne 400055b6 <jvprintf+0x144>
-400055a5: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-400055ab: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-400055b1: e9 d0 0c 00 00 jmp 40006286 <jvprintf+0xe14>
-400055b6: 8b 85 70 ff ff ff mov -0x90(%ebp),%eax
-400055bc: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-400055c2: 8b 45 0c mov 0xc(%ebp),%eax
-400055c5: 40 inc %eax
-400055c6: 89 45 0c mov %eax,0xc(%ebp)
-400055c9: e9 9f 0c 00 00 jmp 4000626d <jvprintf+0xdfb>
-400055ce: c6 85 5f ff ff ff 00 movb $0x0,-0xa1(%ebp)
-400055d5: c7 85 60 ff ff ff 00 movl $0x0,-0xa0(%ebp)
-400055dc: 00 00 00
-400055df: c7 85 64 ff ff ff ff movl $0xffffffff,-0x9c(%ebp)
-400055e6: ff ff ff
-400055e9: c7 85 68 ff ff ff 20 movl $0x20,-0x98(%ebp)
-400055f0: 00 00 00
-400055f3: 8b 45 0c mov 0xc(%ebp),%eax
-400055f6: 8a 00 mov (%eax),%al
-400055f8: 0f be c0 movsbl %al,%eax
-400055fb: 83 e8 20 sub $0x20,%eax
-400055fe: 89 85 e0 fe ff ff mov %eax,-0x120(%ebp)
-40005604: 83 bd e0 fe ff ff 10 cmpl $0x10,-0x120(%ebp)
-4000560b: 77 21 ja 4000562e <jvprintf+0x1bc>
-4000560d: 8b 95 e0 fe ff ff mov -0x120(%ebp),%edx
-40005613: 8b 04 95 30 9a 00 40 mov 0x40009a30(,%edx,4),%eax
-4000561a: ff e0 jmp *%eax
-4000561c: 8b 45 0c mov 0xc(%ebp),%eax
-4000561f: 8a 00 mov (%eax),%al
-40005621: 88 85 5f ff ff ff mov %al,-0xa1(%ebp)
-40005627: 8b 45 0c mov 0xc(%ebp),%eax
-4000562a: 40 inc %eax
-4000562b: 89 45 0c mov %eax,0xc(%ebp)
-4000562e: 8b 45 0c mov 0xc(%ebp),%eax
-40005631: 8a 00 mov (%eax),%al
-40005633: 0f be c0 movsbl %al,%eax
-40005636: 89 85 e8 fe ff ff mov %eax,-0x118(%ebp)
-4000563c: 83 bd e8 fe ff ff 2a cmpl $0x2a,-0x118(%ebp)
-40005643: 74 34 je 40005679 <jvprintf+0x207>
-40005645: 83 bd e8 fe ff ff 2a cmpl $0x2a,-0x118(%ebp)
-4000564c: 7c 45 jl 40005693 <jvprintf+0x221>
-4000564e: 8b 85 e8 fe ff ff mov -0x118(%ebp),%eax
-40005654: 83 e8 30 sub $0x30,%eax
-40005657: 83 f8 09 cmp $0x9,%eax
-4000565a: 77 37 ja 40005693 <jvprintf+0x221>
-4000565c: 8d 45 0c lea 0xc(%ebp),%eax
-4000565f: 8b 55 0c mov 0xc(%ebp),%edx
-40005662: 83 ec 04 sub $0x4,%esp
-40005665: 6a 0a push $0xa
-40005667: 50 push %eax
-40005668: 52 push %edx
-40005669: e8 76 37 00 00 call 40008de4 <strtol>
-4000566e: 83 c4 10 add $0x10,%esp
-40005671: 89 85 60 ff ff ff mov %eax,-0xa0(%ebp)
-40005677: eb 1a jmp 40005693 <jvprintf+0x221>
-40005679: 8b 55 10 mov 0x10(%ebp),%edx
-4000567c: 8d 42 04 lea 0x4(%edx),%eax
-4000567f: 89 45 10 mov %eax,0x10(%ebp)
-40005682: 89 d0 mov %edx,%eax
-40005684: 8b 00 mov (%eax),%eax
-40005686: 89 85 60 ff ff ff mov %eax,-0xa0(%ebp)
-4000568c: 8b 45 0c mov 0xc(%ebp),%eax
-4000568f: 40 inc %eax
-40005690: 89 45 0c mov %eax,0xc(%ebp)
-40005693: 8b 45 0c mov 0xc(%ebp),%eax
-40005696: 8a 00 mov (%eax),%al
-40005698: 3c 2e cmp $0x2e,%al
-4000569a: 75 6c jne 40005708 <jvprintf+0x296>
-4000569c: 8b 45 0c mov 0xc(%ebp),%eax
-4000569f: 40 inc %eax
-400056a0: 89 45 0c mov %eax,0xc(%ebp)
-400056a3: 8b 45 0c mov 0xc(%ebp),%eax
-400056a6: 8a 00 mov (%eax),%al
-400056a8: 0f be c0 movsbl %al,%eax
-400056ab: 89 85 ec fe ff ff mov %eax,-0x114(%ebp)
-400056b1: 83 bd ec fe ff ff 2a cmpl $0x2a,-0x114(%ebp)
-400056b8: 74 34 je 400056ee <jvprintf+0x27c>
-400056ba: 83 bd ec fe ff ff 2a cmpl $0x2a,-0x114(%ebp)
-400056c1: 7c 45 jl 40005708 <jvprintf+0x296>
-400056c3: 8b 85 ec fe ff ff mov -0x114(%ebp),%eax
-400056c9: 83 e8 30 sub $0x30,%eax
-400056cc: 83 f8 09 cmp $0x9,%eax
-400056cf: 77 37 ja 40005708 <jvprintf+0x296>
-400056d1: 8d 45 0c lea 0xc(%ebp),%eax
-400056d4: 8b 55 0c mov 0xc(%ebp),%edx
-400056d7: 83 ec 04 sub $0x4,%esp
-400056da: 6a 0a push $0xa
-400056dc: 50 push %eax
-400056dd: 52 push %edx
-400056de: e8 01 37 00 00 call 40008de4 <strtol>
-400056e3: 83 c4 10 add $0x10,%esp
-400056e6: 89 85 64 ff ff ff mov %eax,-0x9c(%ebp)
-400056ec: eb 1a jmp 40005708 <jvprintf+0x296>
-400056ee: 8b 55 10 mov 0x10(%ebp),%edx
-400056f1: 8d 42 04 lea 0x4(%edx),%eax
-400056f4: 89 45 10 mov %eax,0x10(%ebp)
-400056f7: 89 d0 mov %edx,%eax
-400056f9: 8b 00 mov (%eax),%eax
-400056fb: 89 85 64 ff ff ff mov %eax,-0x9c(%ebp)
-40005701: 8b 45 0c mov 0xc(%ebp),%eax
-40005704: 40 inc %eax
-40005705: 89 45 0c mov %eax,0xc(%ebp)
-40005708: 8b 45 0c mov 0xc(%ebp),%eax
-4000570b: 8a 00 mov (%eax),%al
-4000570d: 0f be c0 movsbl %al,%eax
-40005710: 89 85 f0 fe ff ff mov %eax,-0x110(%ebp)
-40005716: 83 bd f0 fe ff ff 68 cmpl $0x68,-0x110(%ebp)
-4000571d: 74 14 je 40005733 <jvprintf+0x2c1>
-4000571f: 83 bd f0 fe ff ff 6c cmpl $0x6c,-0x110(%ebp)
-40005726: 74 38 je 40005760 <jvprintf+0x2ee>
-40005728: 83 bd f0 fe ff ff 4c cmpl $0x4c,-0x110(%ebp)
-4000572f: 74 5c je 4000578d <jvprintf+0x31b>
-40005731: eb 61 jmp 40005794 <jvprintf+0x322>
-40005733: c7 85 68 ff ff ff 10 movl $0x10,-0x98(%ebp)
-4000573a: 00 00 00
-4000573d: 8b 45 0c mov 0xc(%ebp),%eax
-40005740: 40 inc %eax
-40005741: 89 45 0c mov %eax,0xc(%ebp)
-40005744: 8b 45 0c mov 0xc(%ebp),%eax
-40005747: 8a 00 mov (%eax),%al
-40005749: 3c 68 cmp $0x68,%al
-4000574b: 75 47 jne 40005794 <jvprintf+0x322>
-4000574d: c7 85 68 ff ff ff 08 movl $0x8,-0x98(%ebp)
-40005754: 00 00 00
-40005757: 8b 45 0c mov 0xc(%ebp),%eax
-4000575a: 40 inc %eax
-4000575b: 89 45 0c mov %eax,0xc(%ebp)
-4000575e: eb 34 jmp 40005794 <jvprintf+0x322>
-40005760: c7 85 68 ff ff ff 20 movl $0x20,-0x98(%ebp)
-40005767: 00 00 00
-4000576a: 8b 45 0c mov 0xc(%ebp),%eax
-4000576d: 40 inc %eax
-4000576e: 89 45 0c mov %eax,0xc(%ebp)
-40005771: 8b 45 0c mov 0xc(%ebp),%eax
-40005774: 8a 00 mov (%eax),%al
-40005776: 3c 6c cmp $0x6c,%al
-40005778: 75 1a jne 40005794 <jvprintf+0x322>
-4000577a: c7 85 68 ff ff ff 40 movl $0x40,-0x98(%ebp)
-40005781: 00 00 00
-40005784: 8b 45 0c mov 0xc(%ebp),%eax
-40005787: 40 inc %eax
-40005788: 89 45 0c mov %eax,0xc(%ebp)
-4000578b: eb 07 jmp 40005794 <jvprintf+0x322>
-4000578d: 8b 45 0c mov 0xc(%ebp),%eax
-40005790: 40 inc %eax
-40005791: 89 45 0c mov %eax,0xc(%ebp)
-40005794: 8b 45 0c mov 0xc(%ebp),%eax
-40005797: 8a 00 mov (%eax),%al
-40005799: 0f be c0 movsbl %al,%eax
-4000579c: 83 e8 58 sub $0x58,%eax
-4000579f: 89 85 dc fe ff ff mov %eax,-0x124(%ebp)
-400057a5: 83 bd dc fe ff ff 20 cmpl $0x20,-0x124(%ebp)
-400057ac: 0f 87 bb 0a 00 00 ja 4000626d <jvprintf+0xdfb>
-400057b2: 8b 8d dc fe ff ff mov -0x124(%ebp),%ecx
-400057b8: 8b 04 8d 74 9a 00 40 mov 0x40009a74(,%ecx,4),%eax
-400057bf: ff e0 jmp *%eax
-400057c1: c7 85 78 ff ff ff 00 movl $0x0,-0x88(%ebp)
-400057c8: 00 00 00
-400057cb: c7 85 7c ff ff ff 00 movl $0x0,-0x84(%ebp)
-400057d2: 00 00 00
-400057d5: 8b 85 68 ff ff ff mov -0x98(%ebp),%eax
-400057db: 89 85 d8 fe ff ff mov %eax,-0x128(%ebp)
-400057e1: 83 bd d8 fe ff ff 10 cmpl $0x10,-0x128(%ebp)
-400057e8: 74 28 je 40005812 <jvprintf+0x3a0>
-400057ea: 83 bd d8 fe ff ff 10 cmpl $0x10,-0x128(%ebp)
-400057f1: 77 0b ja 400057fe <jvprintf+0x38c>
-400057f3: 83 bd d8 fe ff ff 08 cmpl $0x8,-0x128(%ebp)
-400057fa: 74 16 je 40005812 <jvprintf+0x3a0>
-400057fc: eb 50 jmp 4000584e <jvprintf+0x3dc>
-400057fe: 83 bd d8 fe ff ff 20 cmpl $0x20,-0x128(%ebp)
-40005805: 74 0b je 40005812 <jvprintf+0x3a0>
-40005807: 83 bd d8 fe ff ff 40 cmpl $0x40,-0x128(%ebp)
-4000580e: 74 22 je 40005832 <jvprintf+0x3c0>
-40005810: eb 3c jmp 4000584e <jvprintf+0x3dc>
-40005812: 8b 55 10 mov 0x10(%ebp),%edx
-40005815: 8d 42 04 lea 0x4(%edx),%eax
-40005818: 89 45 10 mov %eax,0x10(%ebp)
-4000581b: 89 d0 mov %edx,%eax
-4000581d: 8b 00 mov (%eax),%eax
-4000581f: ba 00 00 00 00 mov $0x0,%edx
-40005824: 89 85 78 ff ff ff mov %eax,-0x88(%ebp)
-4000582a: 89 95 7c ff ff ff mov %edx,-0x84(%ebp)
-40005830: eb 1c jmp 4000584e <jvprintf+0x3dc>
-40005832: 8b 55 10 mov 0x10(%ebp),%edx
-40005835: 8d 42 08 lea 0x8(%edx),%eax
-40005838: 89 45 10 mov %eax,0x10(%ebp)
-4000583b: 89 d0 mov %edx,%eax
-4000583d: 8b 50 04 mov 0x4(%eax),%edx
-40005840: 8b 00 mov (%eax),%eax
-40005842: 89 85 78 ff ff ff mov %eax,-0x88(%ebp)
-40005848: 89 95 7c ff ff ff mov %edx,-0x84(%ebp)
-4000584e: 8b 45 0c mov 0xc(%ebp),%eax
-40005851: 8a 00 mov (%eax),%al
-40005853: 3c 58 cmp $0x58,%al
-40005855: 0f 94 c0 sete %al
-40005858: 0f b6 c0 movzbl %al,%eax
-4000585b: 89 85 f4 fe ff ff mov %eax,-0x10c(%ebp)
-40005861: 8b 45 0c mov 0xc(%ebp),%eax
-40005864: 8a 00 mov (%eax),%al
-40005866: 3c 70 cmp $0x70,%al
-40005868: 74 3f je 400058a9 <jvprintf+0x437>
-4000586a: 8b 45 0c mov 0xc(%ebp),%eax
-4000586d: 8a 00 mov (%eax),%al
-4000586f: 3c 78 cmp $0x78,%al
-40005871: 74 36 je 400058a9 <jvprintf+0x437>
-40005873: 8b 45 0c mov 0xc(%ebp),%eax
-40005876: 8a 00 mov (%eax),%al
-40005878: 3c 58 cmp $0x58,%al
-4000587a: 74 2d je 400058a9 <jvprintf+0x437>
-4000587c: 8b 45 0c mov 0xc(%ebp),%eax
-4000587f: 8a 00 mov (%eax),%al
-40005881: 3c 6f cmp $0x6f,%al
-40005883: 75 0c jne 40005891 <jvprintf+0x41f>
-40005885: c7 85 fc fe ff ff 08 movl $0x8,-0x104(%ebp)
-4000588c: 00 00 00
-4000588f: eb 0a jmp 4000589b <jvprintf+0x429>
-40005891: c7 85 fc fe ff ff 0a movl $0xa,-0x104(%ebp)
-40005898: 00 00 00
-4000589b: 8b 95 fc fe ff ff mov -0x104(%ebp),%edx
-400058a1: 89 95 f8 fe ff ff mov %edx,-0x108(%ebp)
-400058a7: eb 0a jmp 400058b3 <jvprintf+0x441>
-400058a9: c7 85 f8 fe ff ff 10 movl $0x10,-0x108(%ebp)
-400058b0: 00 00 00
-400058b3: 83 ec 0c sub $0xc,%esp
-400058b6: ff b5 f4 fe ff ff pushl -0x10c(%ebp)
-400058bc: ff b5 f8 fe ff ff pushl -0x108(%ebp)
-400058c2: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-400058c8: 50 push %eax
-400058c9: ff b5 7c ff ff ff pushl -0x84(%ebp)
-400058cf: ff b5 78 ff ff ff pushl -0x88(%ebp)
-400058d5: e8 f9 f9 ff ff call 400052d3 <ulltoa>
-400058da: 83 c4 20 add $0x20,%esp
-400058dd: c7 85 74 ff ff ff 01 movl $0x1,-0x8c(%ebp)
-400058e4: 00 00 00
-400058e7: e9 10 01 00 00 jmp 400059fc <jvprintf+0x58a>
-400058ec: c7 45 80 00 00 00 00 movl $0x0,-0x80(%ebp)
-400058f3: c7 45 84 00 00 00 00 movl $0x0,-0x7c(%ebp)
-400058fa: 8b 8d 68 ff ff ff mov -0x98(%ebp),%ecx
-40005900: 89 8d d4 fe ff ff mov %ecx,-0x12c(%ebp)
-40005906: 83 bd d4 fe ff ff 10 cmpl $0x10,-0x12c(%ebp)
-4000590d: 74 28 je 40005937 <jvprintf+0x4c5>
-4000590f: 83 bd d4 fe ff ff 10 cmpl $0x10,-0x12c(%ebp)
-40005916: 77 0b ja 40005923 <jvprintf+0x4b1>
-40005918: 83 bd d4 fe ff ff 08 cmpl $0x8,-0x12c(%ebp)
-4000591f: 74 16 je 40005937 <jvprintf+0x4c5>
-40005921: eb 40 jmp 40005963 <jvprintf+0x4f1>
-40005923: 83 bd d4 fe ff ff 20 cmpl $0x20,-0x12c(%ebp)
-4000592a: 74 0b je 40005937 <jvprintf+0x4c5>
-4000592c: 83 bd d4 fe ff ff 40 cmpl $0x40,-0x12c(%ebp)
-40005933: 74 18 je 4000594d <jvprintf+0x4db>
-40005935: eb 2c jmp 40005963 <jvprintf+0x4f1>
-40005937: 8b 55 10 mov 0x10(%ebp),%edx
-4000593a: 8d 42 04 lea 0x4(%edx),%eax
-4000593d: 89 45 10 mov %eax,0x10(%ebp)
-40005940: 89 d0 mov %edx,%eax
-40005942: 8b 00 mov (%eax),%eax
-40005944: 99 cltd
-40005945: 89 45 80 mov %eax,-0x80(%ebp)
-40005948: 89 55 84 mov %edx,-0x7c(%ebp)
-4000594b: eb 16 jmp 40005963 <jvprintf+0x4f1>
-4000594d: 8b 55 10 mov 0x10(%ebp),%edx
-40005950: 8d 42 08 lea 0x8(%edx),%eax
-40005953: 89 45 10 mov %eax,0x10(%ebp)
-40005956: 89 d0 mov %edx,%eax
-40005958: 8b 50 04 mov 0x4(%eax),%edx
-4000595b: 8b 00 mov (%eax),%eax
-4000595d: 89 45 80 mov %eax,-0x80(%ebp)
-40005960: 89 55 84 mov %edx,-0x7c(%ebp)
-40005963: 83 7d 84 00 cmpl $0x0,-0x7c(%ebp)
-40005967: 79 31 jns 4000599a <jvprintf+0x528>
-40005969: c6 85 11 ff ff ff 2d movb $0x2d,-0xef(%ebp)
-40005970: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005976: 8d 48 01 lea 0x1(%eax),%ecx
-40005979: 8b 45 80 mov -0x80(%ebp),%eax
-4000597c: 8b 55 84 mov -0x7c(%ebp),%edx
-4000597f: f7 d8 neg %eax
-40005981: 83 d2 00 adc $0x0,%edx
-40005984: f7 da neg %edx
-40005986: 83 ec 0c sub $0xc,%esp
-40005989: 6a 00 push $0x0
-4000598b: 6a 0a push $0xa
-4000598d: 51 push %ecx
-4000598e: 52 push %edx
-4000598f: 50 push %eax
-40005990: e8 3e f9 ff ff call 400052d3 <ulltoa>
-40005995: 83 c4 20 add $0x20,%esp
-40005998: eb 1e jmp 400059b8 <jvprintf+0x546>
-4000599a: 8b 55 80 mov -0x80(%ebp),%edx
-4000599d: 8b 4d 84 mov -0x7c(%ebp),%ecx
-400059a0: 83 ec 0c sub $0xc,%esp
-400059a3: 6a 00 push $0x0
-400059a5: 6a 0a push $0xa
-400059a7: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-400059ad: 50 push %eax
-400059ae: 51 push %ecx
-400059af: 52 push %edx
-400059b0: e8 1e f9 ff ff call 400052d3 <ulltoa>
-400059b5: 83 c4 20 add $0x20,%esp
-400059b8: 83 7d 84 00 cmpl $0x0,-0x7c(%ebp)
-400059bc: 78 28 js 400059e6 <jvprintf+0x574>
-400059be: c7 85 00 ff ff ff 01 movl $0x1,-0x100(%ebp)
-400059c5: 00 00 00
-400059c8: 83 7d 84 00 cmpl $0x0,-0x7c(%ebp)
-400059cc: 7f 22 jg 400059f0 <jvprintf+0x57e>
-400059ce: 83 7d 84 00 cmpl $0x0,-0x7c(%ebp)
-400059d2: 78 06 js 400059da <jvprintf+0x568>
-400059d4: 83 7d 80 00 cmpl $0x0,-0x80(%ebp)
-400059d8: 77 16 ja 400059f0 <jvprintf+0x57e>
-400059da: c7 85 00 ff ff ff 00 movl $0x0,-0x100(%ebp)
-400059e1: 00 00 00
-400059e4: eb 0a jmp 400059f0 <jvprintf+0x57e>
-400059e6: c7 85 00 ff ff ff ff movl $0xffffffff,-0x100(%ebp)
-400059ed: ff ff ff
-400059f0: 8b 85 00 ff ff ff mov -0x100(%ebp),%eax
-400059f6: 89 85 74 ff ff ff mov %eax,-0x8c(%ebp)
-400059fc: 83 bd 60 ff ff ff 00 cmpl $0x0,-0xa0(%ebp)
-40005a03: 0f 84 ba 03 00 00 je 40005dc3 <jvprintf+0x951>
-40005a09: 83 ec 0c sub $0xc,%esp
-40005a0c: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005a12: 50 push %eax
-40005a13: e8 5c 38 00 00 call 40009274 <strlen>
-40005a18: 83 c4 10 add $0x10,%esp
-40005a1b: 89 45 8c mov %eax,-0x74(%ebp)
-40005a1e: 0f be 95 5f ff ff ff movsbl -0xa1(%ebp),%edx
-40005a25: 89 95 04 ff ff ff mov %edx,-0xfc(%ebp)
-40005a2b: 83 bd 04 ff ff ff 30 cmpl $0x30,-0xfc(%ebp)
-40005a32: 0f 87 4f 03 00 00 ja 40005d87 <jvprintf+0x915>
-40005a38: 8b 8d 04 ff ff ff mov -0xfc(%ebp),%ecx
-40005a3e: 8b 04 8d f8 9a 00 40 mov 0x40009af8(,%ecx,4),%eax
-40005a45: ff e0 jmp *%eax
-40005a47: 83 ec 08 sub $0x8,%esp
-40005a4a: 6a 20 push $0x20
-40005a4c: ff 75 08 pushl 0x8(%ebp)
-40005a4f: e8 5a f9 ff ff call 400053ae <jprintf_putc>
-40005a54: 83 c4 10 add $0x10,%esp
-40005a57: 89 45 90 mov %eax,-0x70(%ebp)
-40005a5a: 83 7d 90 00 cmpl $0x0,-0x70(%ebp)
-40005a5e: 79 0e jns 40005a6e <jvprintf+0x5fc>
-40005a60: 8b 45 90 mov -0x70(%ebp),%eax
-40005a63: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005a69: e9 18 08 00 00 jmp 40006286 <jvprintf+0xe14>
-40005a6e: 83 7d 90 00 cmpl $0x0,-0x70(%ebp)
-40005a72: 75 11 jne 40005a85 <jvprintf+0x613>
-40005a74: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005a7a: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005a80: e9 01 08 00 00 jmp 40006286 <jvprintf+0xe14>
-40005a85: 8b 45 90 mov -0x70(%ebp),%eax
-40005a88: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005a8e: ff 45 8c incl -0x74(%ebp)
-40005a91: 8b 45 8c mov -0x74(%ebp),%eax
-40005a94: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40005a9a: 72 ab jb 40005a47 <jvprintf+0x5d5>
-40005a9c: 83 ec 04 sub $0x4,%esp
-40005a9f: 6a ff push $0xffffffff
-40005aa1: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005aa7: 50 push %eax
-40005aa8: ff 75 08 pushl 0x8(%ebp)
-40005aab: e8 3d f9 ff ff call 400053ed <jprintf_putsn>
-40005ab0: 83 c4 10 add $0x10,%esp
-40005ab3: 89 45 94 mov %eax,-0x6c(%ebp)
-40005ab6: 83 7d 94 00 cmpl $0x0,-0x6c(%ebp)
-40005aba: 79 0e jns 40005aca <jvprintf+0x658>
-40005abc: 8b 4d 94 mov -0x6c(%ebp),%ecx
-40005abf: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005ac5: e9 bc 07 00 00 jmp 40006286 <jvprintf+0xe14>
-40005aca: 8b 45 94 mov -0x6c(%ebp),%eax
-40005acd: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005ad3: e9 ec 03 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005ad8: 83 ec 04 sub $0x4,%esp
-40005adb: 6a ff push $0xffffffff
-40005add: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005ae3: 50 push %eax
-40005ae4: ff 75 08 pushl 0x8(%ebp)
-40005ae7: e8 01 f9 ff ff call 400053ed <jprintf_putsn>
-40005aec: 83 c4 10 add $0x10,%esp
-40005aef: 89 45 98 mov %eax,-0x68(%ebp)
-40005af2: 83 7d 98 00 cmpl $0x0,-0x68(%ebp)
-40005af6: 79 0e jns 40005b06 <jvprintf+0x694>
-40005af8: 8b 45 98 mov -0x68(%ebp),%eax
-40005afb: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005b01: e9 80 07 00 00 jmp 40006286 <jvprintf+0xe14>
-40005b06: 8b 45 98 mov -0x68(%ebp),%eax
-40005b09: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005b0f: eb 4a jmp 40005b5b <jvprintf+0x6e9>
-40005b11: 83 ec 08 sub $0x8,%esp
-40005b14: 6a 20 push $0x20
-40005b16: ff 75 08 pushl 0x8(%ebp)
-40005b19: e8 90 f8 ff ff call 400053ae <jprintf_putc>
-40005b1e: 83 c4 10 add $0x10,%esp
-40005b21: 89 45 9c mov %eax,-0x64(%ebp)
-40005b24: 83 7d 9c 00 cmpl $0x0,-0x64(%ebp)
-40005b28: 79 0e jns 40005b38 <jvprintf+0x6c6>
-40005b2a: 8b 55 9c mov -0x64(%ebp),%edx
-40005b2d: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005b33: e9 4e 07 00 00 jmp 40006286 <jvprintf+0xe14>
-40005b38: 83 7d 9c 00 cmpl $0x0,-0x64(%ebp)
-40005b3c: 75 11 jne 40005b4f <jvprintf+0x6dd>
-40005b3e: 8b 8d 58 ff ff ff mov -0xa8(%ebp),%ecx
-40005b44: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005b4a: e9 37 07 00 00 jmp 40006286 <jvprintf+0xe14>
-40005b4f: 8b 45 9c mov -0x64(%ebp),%eax
-40005b52: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005b58: ff 45 8c incl -0x74(%ebp)
-40005b5b: 8b 45 8c mov -0x74(%ebp),%eax
-40005b5e: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40005b64: 72 ab jb 40005b11 <jvprintf+0x69f>
-40005b66: e9 59 03 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005b6b: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005b72: 0f 89 93 00 00 00 jns 40005c0b <jvprintf+0x799>
-40005b78: 83 ec 08 sub $0x8,%esp
-40005b7b: 6a 2d push $0x2d
-40005b7d: ff 75 08 pushl 0x8(%ebp)
-40005b80: e8 29 f8 ff ff call 400053ae <jprintf_putc>
-40005b85: 83 c4 10 add $0x10,%esp
-40005b88: 89 45 a0 mov %eax,-0x60(%ebp)
-40005b8b: 83 7d a0 00 cmpl $0x0,-0x60(%ebp)
-40005b8f: 79 0e jns 40005b9f <jvprintf+0x72d>
-40005b91: 8b 45 a0 mov -0x60(%ebp),%eax
-40005b94: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005b9a: e9 e7 06 00 00 jmp 40006286 <jvprintf+0xe14>
-40005b9f: 83 7d a0 00 cmpl $0x0,-0x60(%ebp)
-40005ba3: 75 11 jne 40005bb6 <jvprintf+0x744>
-40005ba5: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005bab: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005bb1: e9 d0 06 00 00 jmp 40006286 <jvprintf+0xe14>
-40005bb6: 8b 45 a0 mov -0x60(%ebp),%eax
-40005bb9: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005bbf: eb 4a jmp 40005c0b <jvprintf+0x799>
-40005bc1: 83 ec 08 sub $0x8,%esp
-40005bc4: 6a 30 push $0x30
-40005bc6: ff 75 08 pushl 0x8(%ebp)
-40005bc9: e8 e0 f7 ff ff call 400053ae <jprintf_putc>
-40005bce: 83 c4 10 add $0x10,%esp
-40005bd1: 89 45 a4 mov %eax,-0x5c(%ebp)
-40005bd4: 83 7d a4 00 cmpl $0x0,-0x5c(%ebp)
-40005bd8: 79 0e jns 40005be8 <jvprintf+0x776>
-40005bda: 8b 4d a4 mov -0x5c(%ebp),%ecx
-40005bdd: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005be3: e9 9e 06 00 00 jmp 40006286 <jvprintf+0xe14>
-40005be8: 83 7d a4 00 cmpl $0x0,-0x5c(%ebp)
-40005bec: 75 11 jne 40005bff <jvprintf+0x78d>
-40005bee: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-40005bf4: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005bfa: e9 87 06 00 00 jmp 40006286 <jvprintf+0xe14>
-40005bff: 8b 45 a4 mov -0x5c(%ebp),%eax
-40005c02: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005c08: ff 45 8c incl -0x74(%ebp)
-40005c0b: 8b 45 8c mov -0x74(%ebp),%eax
-40005c0e: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40005c14: 72 ab jb 40005bc1 <jvprintf+0x74f>
-40005c16: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005c1d: 79 3d jns 40005c5c <jvprintf+0x7ea>
-40005c1f: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005c25: 40 inc %eax
-40005c26: 83 ec 04 sub $0x4,%esp
-40005c29: 6a ff push $0xffffffff
-40005c2b: 50 push %eax
-40005c2c: ff 75 08 pushl 0x8(%ebp)
-40005c2f: e8 b9 f7 ff ff call 400053ed <jprintf_putsn>
-40005c34: 83 c4 10 add $0x10,%esp
-40005c37: 89 45 a8 mov %eax,-0x58(%ebp)
-40005c3a: 83 7d a8 00 cmpl $0x0,-0x58(%ebp)
-40005c3e: 79 0e jns 40005c4e <jvprintf+0x7dc>
-40005c40: 8b 55 a8 mov -0x58(%ebp),%edx
-40005c43: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005c49: e9 38 06 00 00 jmp 40006286 <jvprintf+0xe14>
-40005c4e: 8b 45 a8 mov -0x58(%ebp),%eax
-40005c51: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005c57: e9 68 02 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005c5c: 83 ec 04 sub $0x4,%esp
-40005c5f: 6a ff push $0xffffffff
-40005c61: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005c67: 50 push %eax
-40005c68: ff 75 08 pushl 0x8(%ebp)
-40005c6b: e8 7d f7 ff ff call 400053ed <jprintf_putsn>
-40005c70: 83 c4 10 add $0x10,%esp
-40005c73: 89 45 ac mov %eax,-0x54(%ebp)
-40005c76: 83 7d ac 00 cmpl $0x0,-0x54(%ebp)
-40005c7a: 79 0e jns 40005c8a <jvprintf+0x818>
-40005c7c: 8b 4d ac mov -0x54(%ebp),%ecx
-40005c7f: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005c85: e9 fc 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005c8a: 8b 45 ac mov -0x54(%ebp),%eax
-40005c8d: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005c93: e9 2c 02 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005c98: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005c9f: 78 4f js 40005cf0 <jvprintf+0x87e>
-40005ca1: ff 45 8c incl -0x74(%ebp)
-40005ca4: eb 4a jmp 40005cf0 <jvprintf+0x87e>
-40005ca6: 83 ec 08 sub $0x8,%esp
-40005ca9: 6a 20 push $0x20
-40005cab: ff 75 08 pushl 0x8(%ebp)
-40005cae: e8 fb f6 ff ff call 400053ae <jprintf_putc>
-40005cb3: 83 c4 10 add $0x10,%esp
-40005cb6: 89 45 b0 mov %eax,-0x50(%ebp)
-40005cb9: 83 7d b0 00 cmpl $0x0,-0x50(%ebp)
-40005cbd: 79 0e jns 40005ccd <jvprintf+0x85b>
-40005cbf: 8b 45 b0 mov -0x50(%ebp),%eax
-40005cc2: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005cc8: e9 b9 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005ccd: 83 7d b0 00 cmpl $0x0,-0x50(%ebp)
-40005cd1: 75 11 jne 40005ce4 <jvprintf+0x872>
-40005cd3: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005cd9: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005cdf: e9 a2 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005ce4: 8b 45 b0 mov -0x50(%ebp),%eax
-40005ce7: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005ced: ff 45 8c incl -0x74(%ebp)
-40005cf0: 8b 45 8c mov -0x74(%ebp),%eax
-40005cf3: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40005cf9: 72 ab jb 40005ca6 <jvprintf+0x834>
-40005cfb: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005d02: 78 47 js 40005d4b <jvprintf+0x8d9>
-40005d04: 83 ec 08 sub $0x8,%esp
-40005d07: 6a 2b push $0x2b
-40005d09: ff 75 08 pushl 0x8(%ebp)
-40005d0c: e8 9d f6 ff ff call 400053ae <jprintf_putc>
-40005d11: 83 c4 10 add $0x10,%esp
-40005d14: 89 45 b4 mov %eax,-0x4c(%ebp)
-40005d17: 83 7d b4 00 cmpl $0x0,-0x4c(%ebp)
-40005d1b: 79 0e jns 40005d2b <jvprintf+0x8b9>
-40005d1d: 8b 4d b4 mov -0x4c(%ebp),%ecx
-40005d20: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005d26: e9 5b 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005d2b: 83 7d b4 00 cmpl $0x0,-0x4c(%ebp)
-40005d2f: 75 11 jne 40005d42 <jvprintf+0x8d0>
-40005d31: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-40005d37: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005d3d: e9 44 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005d42: 8b 45 b4 mov -0x4c(%ebp),%eax
-40005d45: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005d4b: 83 ec 04 sub $0x4,%esp
-40005d4e: 6a ff push $0xffffffff
-40005d50: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005d56: 50 push %eax
-40005d57: ff 75 08 pushl 0x8(%ebp)
-40005d5a: e8 8e f6 ff ff call 400053ed <jprintf_putsn>
-40005d5f: 83 c4 10 add $0x10,%esp
-40005d62: 89 45 b8 mov %eax,-0x48(%ebp)
-40005d65: 83 7d b8 00 cmpl $0x0,-0x48(%ebp)
-40005d69: 79 0e jns 40005d79 <jvprintf+0x907>
-40005d6b: 8b 55 b8 mov -0x48(%ebp),%edx
-40005d6e: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005d74: e9 0d 05 00 00 jmp 40006286 <jvprintf+0xe14>
-40005d79: 8b 45 b8 mov -0x48(%ebp),%eax
-40005d7c: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005d82: e9 3d 01 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005d87: 83 ec 04 sub $0x4,%esp
-40005d8a: 6a ff push $0xffffffff
-40005d8c: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005d92: 50 push %eax
-40005d93: ff 75 08 pushl 0x8(%ebp)
-40005d96: e8 52 f6 ff ff call 400053ed <jprintf_putsn>
-40005d9b: 83 c4 10 add $0x10,%esp
-40005d9e: 89 45 bc mov %eax,-0x44(%ebp)
-40005da1: 83 7d bc 00 cmpl $0x0,-0x44(%ebp)
-40005da5: 79 0e jns 40005db5 <jvprintf+0x943>
-40005da7: 8b 4d bc mov -0x44(%ebp),%ecx
-40005daa: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005db0: e9 d1 04 00 00 jmp 40006286 <jvprintf+0xe14>
-40005db5: 8b 45 bc mov -0x44(%ebp),%eax
-40005db8: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005dbe: e9 01 01 00 00 jmp 40005ec4 <jvprintf+0xa52>
-40005dc3: 0f be 85 5f ff ff ff movsbl -0xa1(%ebp),%eax
-40005dca: 89 85 08 ff ff ff mov %eax,-0xf8(%ebp)
-40005dd0: 83 bd 08 ff ff ff 20 cmpl $0x20,-0xf8(%ebp)
-40005dd7: 74 64 je 40005e3d <jvprintf+0x9cb>
-40005dd9: 83 bd 08 ff ff ff 2b cmpl $0x2b,-0xf8(%ebp)
-40005de0: 74 05 je 40005de7 <jvprintf+0x975>
-40005de2: e9 a6 00 00 00 jmp 40005e8d <jvprintf+0xa1b>
-40005de7: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005dee: 0f 88 99 00 00 00 js 40005e8d <jvprintf+0xa1b>
-40005df4: 83 ec 08 sub $0x8,%esp
-40005df7: 6a 2b push $0x2b
-40005df9: ff 75 08 pushl 0x8(%ebp)
-40005dfc: e8 ad f5 ff ff call 400053ae <jprintf_putc>
-40005e01: 83 c4 10 add $0x10,%esp
-40005e04: 89 45 c0 mov %eax,-0x40(%ebp)
-40005e07: 83 7d c0 00 cmpl $0x0,-0x40(%ebp)
-40005e0b: 79 0e jns 40005e1b <jvprintf+0x9a9>
-40005e0d: 8b 55 c0 mov -0x40(%ebp),%edx
-40005e10: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005e16: e9 6b 04 00 00 jmp 40006286 <jvprintf+0xe14>
-40005e1b: 83 7d c0 00 cmpl $0x0,-0x40(%ebp)
-40005e1f: 75 11 jne 40005e32 <jvprintf+0x9c0>
-40005e21: 8b 8d 58 ff ff ff mov -0xa8(%ebp),%ecx
-40005e27: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005e2d: e9 54 04 00 00 jmp 40006286 <jvprintf+0xe14>
-40005e32: 8b 45 c0 mov -0x40(%ebp),%eax
-40005e35: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005e3b: eb 50 jmp 40005e8d <jvprintf+0xa1b>
-40005e3d: 83 bd 74 ff ff ff 00 cmpl $0x0,-0x8c(%ebp)
-40005e44: 78 47 js 40005e8d <jvprintf+0xa1b>
-40005e46: 83 ec 08 sub $0x8,%esp
-40005e49: 6a 20 push $0x20
-40005e4b: ff 75 08 pushl 0x8(%ebp)
-40005e4e: e8 5b f5 ff ff call 400053ae <jprintf_putc>
-40005e53: 83 c4 10 add $0x10,%esp
-40005e56: 89 45 c4 mov %eax,-0x3c(%ebp)
-40005e59: 83 7d c4 00 cmpl $0x0,-0x3c(%ebp)
-40005e5d: 79 0e jns 40005e6d <jvprintf+0x9fb>
-40005e5f: 8b 45 c4 mov -0x3c(%ebp),%eax
-40005e62: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005e68: e9 19 04 00 00 jmp 40006286 <jvprintf+0xe14>
-40005e6d: 83 7d c4 00 cmpl $0x0,-0x3c(%ebp)
-40005e71: 75 11 jne 40005e84 <jvprintf+0xa12>
-40005e73: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005e79: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005e7f: e9 02 04 00 00 jmp 40006286 <jvprintf+0xe14>
-40005e84: 8b 45 c4 mov -0x3c(%ebp),%eax
-40005e87: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005e8d: 83 ec 04 sub $0x4,%esp
-40005e90: 6a ff push $0xffffffff
-40005e92: 8d 85 11 ff ff ff lea -0xef(%ebp),%eax
-40005e98: 50 push %eax
-40005e99: ff 75 08 pushl 0x8(%ebp)
-40005e9c: e8 4c f5 ff ff call 400053ed <jprintf_putsn>
-40005ea1: 83 c4 10 add $0x10,%esp
-40005ea4: 89 45 c8 mov %eax,-0x38(%ebp)
-40005ea7: 83 7d c8 00 cmpl $0x0,-0x38(%ebp)
-40005eab: 79 0e jns 40005ebb <jvprintf+0xa49>
-40005ead: 8b 4d c8 mov -0x38(%ebp),%ecx
-40005eb0: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40005eb6: e9 cb 03 00 00 jmp 40006286 <jvprintf+0xe14>
-40005ebb: 8b 45 c8 mov -0x38(%ebp),%eax
-40005ebe: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005ec4: 8b 45 0c mov 0xc(%ebp),%eax
-40005ec7: 40 inc %eax
-40005ec8: 89 45 0c mov %eax,0xc(%ebp)
-40005ecb: e9 9d 03 00 00 jmp 4000626d <jvprintf+0xdfb>
-40005ed0: 8b 55 10 mov 0x10(%ebp),%edx
-40005ed3: 8d 42 04 lea 0x4(%edx),%eax
-40005ed6: 89 45 10 mov %eax,0x10(%ebp)
-40005ed9: 89 d0 mov %edx,%eax
-40005edb: 8b 00 mov (%eax),%eax
-40005edd: 88 45 cf mov %al,-0x31(%ebp)
-40005ee0: 0f be 45 cf movsbl -0x31(%ebp),%eax
-40005ee4: 83 ec 08 sub $0x8,%esp
-40005ee7: 50 push %eax
-40005ee8: ff 75 08 pushl 0x8(%ebp)
-40005eeb: e8 be f4 ff ff call 400053ae <jprintf_putc>
-40005ef0: 83 c4 10 add $0x10,%esp
-40005ef3: 89 45 d0 mov %eax,-0x30(%ebp)
-40005ef6: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
-40005efa: 79 0e jns 40005f0a <jvprintf+0xa98>
-40005efc: 8b 45 d0 mov -0x30(%ebp),%eax
-40005eff: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005f05: e9 7c 03 00 00 jmp 40006286 <jvprintf+0xe14>
-40005f0a: 83 7d d0 00 cmpl $0x0,-0x30(%ebp)
-40005f0e: 75 11 jne 40005f21 <jvprintf+0xaaf>
-40005f10: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005f16: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005f1c: e9 65 03 00 00 jmp 40006286 <jvprintf+0xe14>
-40005f21: 8b 45 d0 mov -0x30(%ebp),%eax
-40005f24: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40005f2a: 8b 45 0c mov 0xc(%ebp),%eax
-40005f2d: 40 inc %eax
-40005f2e: 89 45 0c mov %eax,0xc(%ebp)
-40005f31: e9 37 03 00 00 jmp 4000626d <jvprintf+0xdfb>
-40005f36: 8b 55 10 mov 0x10(%ebp),%edx
-40005f39: 8d 42 04 lea 0x4(%edx),%eax
-40005f3c: 89 45 10 mov %eax,0x10(%ebp)
-40005f3f: 89 d0 mov %edx,%eax
-40005f41: 8b 00 mov (%eax),%eax
-40005f43: 89 45 d4 mov %eax,-0x2c(%ebp)
-40005f46: 83 bd 60 ff ff ff 00 cmpl $0x0,-0xa0(%ebp)
-40005f4d: 0f 84 e3 02 00 00 je 40006236 <jvprintf+0xdc4>
-40005f53: 83 ec 0c sub $0xc,%esp
-40005f56: ff 75 d4 pushl -0x2c(%ebp)
-40005f59: e8 16 33 00 00 call 40009274 <strlen>
-40005f5e: 83 c4 10 add $0x10,%esp
-40005f61: 89 45 d8 mov %eax,-0x28(%ebp)
-40005f64: 0f be 8d 5f ff ff ff movsbl -0xa1(%ebp),%ecx
-40005f6b: 89 8d 0c ff ff ff mov %ecx,-0xf4(%ebp)
-40005f71: 83 bd 0c ff ff ff 2d cmpl $0x2d,-0xf4(%ebp)
-40005f78: 74 3a je 40005fb4 <jvprintf+0xb42>
-40005f7a: 83 bd 0c ff ff ff 2d cmpl $0x2d,-0xf4(%ebp)
-40005f81: 7f 1f jg 40005fa2 <jvprintf+0xb30>
-40005f83: 83 bd 0c ff ff ff 00 cmpl $0x0,-0xf4(%ebp)
-40005f8a: 0f 84 98 01 00 00 je 40006128 <jvprintf+0xcb6>
-40005f90: 83 bd 0c ff ff ff 20 cmpl $0x20,-0xf4(%ebp)
-40005f97: 0f 84 8b 01 00 00 je 40006128 <jvprintf+0xcb6>
-40005f9d: e9 40 02 00 00 jmp 400061e2 <jvprintf+0xd70>
-40005fa2: 83 bd 0c ff ff ff 30 cmpl $0x30,-0xf4(%ebp)
-40005fa9: 0f 84 bf 00 00 00 je 4000606e <jvprintf+0xbfc>
-40005faf: e9 2e 02 00 00 jmp 400061e2 <jvprintf+0xd70>
-40005fb4: 83 ec 04 sub $0x4,%esp
-40005fb7: ff 75 d8 pushl -0x28(%ebp)
-40005fba: ff 75 d4 pushl -0x2c(%ebp)
-40005fbd: ff 75 08 pushl 0x8(%ebp)
-40005fc0: e8 28 f4 ff ff call 400053ed <jprintf_putsn>
-40005fc5: 83 c4 10 add $0x10,%esp
-40005fc8: 89 45 e0 mov %eax,-0x20(%ebp)
-40005fcb: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)
-40005fcf: 79 0e jns 40005fdf <jvprintf+0xb6d>
-40005fd1: 8b 45 e0 mov -0x20(%ebp),%eax
-40005fd4: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40005fda: e9 a7 02 00 00 jmp 40006286 <jvprintf+0xe14>
-40005fdf: 83 7d d8 ff cmpl $0xffffffff,-0x28(%ebp)
-40005fe3: 74 1e je 40006003 <jvprintf+0xb91>
-40005fe5: 8b 45 e0 mov -0x20(%ebp),%eax
-40005fe8: 3b 45 d8 cmp -0x28(%ebp),%eax
-40005feb: 74 16 je 40006003 <jvprintf+0xb91>
-40005fed: 8b 45 e0 mov -0x20(%ebp),%eax
-40005ff0: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40005ff6: 01 c2 add %eax,%edx
-40005ff8: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40005ffe: e9 83 02 00 00 jmp 40006286 <jvprintf+0xe14>
-40006003: 8b 45 e0 mov -0x20(%ebp),%eax
-40006006: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-4000600c: 8b 45 d8 mov -0x28(%ebp),%eax
-4000600f: 89 45 dc mov %eax,-0x24(%ebp)
-40006012: eb 4a jmp 4000605e <jvprintf+0xbec>
-40006014: 83 ec 08 sub $0x8,%esp
-40006017: 6a 20 push $0x20
-40006019: ff 75 08 pushl 0x8(%ebp)
-4000601c: e8 8d f3 ff ff call 400053ae <jprintf_putc>
-40006021: 83 c4 10 add $0x10,%esp
-40006024: 89 45 e4 mov %eax,-0x1c(%ebp)
-40006027: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
-4000602b: 79 0e jns 4000603b <jvprintf+0xbc9>
-4000602d: 8b 4d e4 mov -0x1c(%ebp),%ecx
-40006030: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40006036: e9 4b 02 00 00 jmp 40006286 <jvprintf+0xe14>
-4000603b: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
-4000603f: 75 11 jne 40006052 <jvprintf+0xbe0>
-40006041: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-40006047: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-4000604d: e9 34 02 00 00 jmp 40006286 <jvprintf+0xe14>
-40006052: 8b 45 e4 mov -0x1c(%ebp),%eax
-40006055: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-4000605b: ff 45 dc incl -0x24(%ebp)
-4000605e: 8b 45 dc mov -0x24(%ebp),%eax
-40006061: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40006067: 72 ab jb 40006014 <jvprintf+0xba2>
-40006069: e9 f8 01 00 00 jmp 40006266 <jvprintf+0xdf4>
-4000606e: 8b 45 d8 mov -0x28(%ebp),%eax
-40006071: 89 45 dc mov %eax,-0x24(%ebp)
-40006074: eb 4a jmp 400060c0 <jvprintf+0xc4e>
-40006076: 83 ec 08 sub $0x8,%esp
-40006079: 6a 30 push $0x30
-4000607b: ff 75 08 pushl 0x8(%ebp)
-4000607e: e8 2b f3 ff ff call 400053ae <jprintf_putc>
-40006083: 83 c4 10 add $0x10,%esp
-40006086: 89 45 e8 mov %eax,-0x18(%ebp)
-40006089: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
-4000608d: 79 0e jns 4000609d <jvprintf+0xc2b>
-4000608f: 8b 55 e8 mov -0x18(%ebp),%edx
-40006092: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40006098: e9 e9 01 00 00 jmp 40006286 <jvprintf+0xe14>
-4000609d: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
-400060a1: 75 11 jne 400060b4 <jvprintf+0xc42>
-400060a3: 8b 8d 58 ff ff ff mov -0xa8(%ebp),%ecx
-400060a9: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-400060af: e9 d2 01 00 00 jmp 40006286 <jvprintf+0xe14>
-400060b4: 8b 45 e8 mov -0x18(%ebp),%eax
-400060b7: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-400060bd: ff 45 dc incl -0x24(%ebp)
-400060c0: 8b 45 dc mov -0x24(%ebp),%eax
-400060c3: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-400060c9: 72 ab jb 40006076 <jvprintf+0xc04>
-400060cb: 83 ec 04 sub $0x4,%esp
-400060ce: ff 75 d8 pushl -0x28(%ebp)
-400060d1: ff 75 d4 pushl -0x2c(%ebp)
-400060d4: ff 75 08 pushl 0x8(%ebp)
-400060d7: e8 11 f3 ff ff call 400053ed <jprintf_putsn>
-400060dc: 83 c4 10 add $0x10,%esp
-400060df: 89 45 ec mov %eax,-0x14(%ebp)
-400060e2: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-400060e6: 79 0e jns 400060f6 <jvprintf+0xc84>
-400060e8: 8b 45 ec mov -0x14(%ebp),%eax
-400060eb: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-400060f1: e9 90 01 00 00 jmp 40006286 <jvprintf+0xe14>
-400060f6: 83 7d d8 ff cmpl $0xffffffff,-0x28(%ebp)
-400060fa: 74 1e je 4000611a <jvprintf+0xca8>
-400060fc: 8b 45 ec mov -0x14(%ebp),%eax
-400060ff: 3b 45 d8 cmp -0x28(%ebp),%eax
-40006102: 74 16 je 4000611a <jvprintf+0xca8>
-40006104: 8b 45 ec mov -0x14(%ebp),%eax
-40006107: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-4000610d: 01 c2 add %eax,%edx
-4000610f: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40006115: e9 6c 01 00 00 jmp 40006286 <jvprintf+0xe14>
-4000611a: 8b 45 ec mov -0x14(%ebp),%eax
-4000611d: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40006123: e9 3e 01 00 00 jmp 40006266 <jvprintf+0xdf4>
-40006128: 8b 45 d8 mov -0x28(%ebp),%eax
-4000612b: 89 45 dc mov %eax,-0x24(%ebp)
-4000612e: eb 4a jmp 4000617a <jvprintf+0xd08>
-40006130: 83 ec 08 sub $0x8,%esp
-40006133: 6a 20 push $0x20
-40006135: ff 75 08 pushl 0x8(%ebp)
-40006138: e8 71 f2 ff ff call 400053ae <jprintf_putc>
-4000613d: 83 c4 10 add $0x10,%esp
-40006140: 89 45 f0 mov %eax,-0x10(%ebp)
-40006143: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40006147: 79 0e jns 40006157 <jvprintf+0xce5>
-40006149: 8b 4d f0 mov -0x10(%ebp),%ecx
-4000614c: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-40006152: e9 2f 01 00 00 jmp 40006286 <jvprintf+0xe14>
-40006157: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-4000615b: 75 11 jne 4000616e <jvprintf+0xcfc>
-4000615d: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-40006163: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40006169: e9 18 01 00 00 jmp 40006286 <jvprintf+0xe14>
-4000616e: 8b 45 f0 mov -0x10(%ebp),%eax
-40006171: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40006177: ff 45 dc incl -0x24(%ebp)
-4000617a: 8b 45 dc mov -0x24(%ebp),%eax
-4000617d: 3b 85 60 ff ff ff cmp -0xa0(%ebp),%eax
-40006183: 72 ab jb 40006130 <jvprintf+0xcbe>
-40006185: 83 ec 04 sub $0x4,%esp
-40006188: ff 75 d8 pushl -0x28(%ebp)
-4000618b: ff 75 d4 pushl -0x2c(%ebp)
-4000618e: ff 75 08 pushl 0x8(%ebp)
-40006191: e8 57 f2 ff ff call 400053ed <jprintf_putsn>
-40006196: 83 c4 10 add $0x10,%esp
-40006199: 89 45 f4 mov %eax,-0xc(%ebp)
-4000619c: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400061a0: 79 0e jns 400061b0 <jvprintf+0xd3e>
-400061a2: 8b 55 f4 mov -0xc(%ebp),%edx
-400061a5: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-400061ab: e9 d6 00 00 00 jmp 40006286 <jvprintf+0xe14>
-400061b0: 83 7d d8 ff cmpl $0xffffffff,-0x28(%ebp)
-400061b4: 74 1e je 400061d4 <jvprintf+0xd62>
-400061b6: 8b 45 f4 mov -0xc(%ebp),%eax
-400061b9: 3b 45 d8 cmp -0x28(%ebp),%eax
-400061bc: 74 16 je 400061d4 <jvprintf+0xd62>
-400061be: 8b 45 f4 mov -0xc(%ebp),%eax
-400061c1: 8b 8d 58 ff ff ff mov -0xa8(%ebp),%ecx
-400061c7: 01 c1 add %eax,%ecx
-400061c9: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-400061cf: e9 b2 00 00 00 jmp 40006286 <jvprintf+0xe14>
-400061d4: 8b 45 f4 mov -0xc(%ebp),%eax
-400061d7: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-400061dd: e9 84 00 00 00 jmp 40006266 <jvprintf+0xdf4>
-400061e2: 83 ec 04 sub $0x4,%esp
-400061e5: ff 75 d8 pushl -0x28(%ebp)
-400061e8: ff 75 d4 pushl -0x2c(%ebp)
-400061eb: ff 75 08 pushl 0x8(%ebp)
-400061ee: e8 fa f1 ff ff call 400053ed <jprintf_putsn>
-400061f3: 83 c4 10 add $0x10,%esp
-400061f6: 89 45 f8 mov %eax,-0x8(%ebp)
-400061f9: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400061fd: 79 0b jns 4000620a <jvprintf+0xd98>
-400061ff: 8b 45 f8 mov -0x8(%ebp),%eax
-40006202: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40006208: eb 7c jmp 40006286 <jvprintf+0xe14>
-4000620a: 83 7d d8 ff cmpl $0xffffffff,-0x28(%ebp)
-4000620e: 74 1b je 4000622b <jvprintf+0xdb9>
-40006210: 8b 45 f8 mov -0x8(%ebp),%eax
-40006213: 3b 45 d8 cmp -0x28(%ebp),%eax
-40006216: 74 13 je 4000622b <jvprintf+0xdb9>
-40006218: 8b 45 f8 mov -0x8(%ebp),%eax
-4000621b: 8b 95 58 ff ff ff mov -0xa8(%ebp),%edx
-40006221: 01 c2 add %eax,%edx
-40006223: 89 95 e4 fe ff ff mov %edx,-0x11c(%ebp)
-40006229: eb 5b jmp 40006286 <jvprintf+0xe14>
-4000622b: 8b 45 f8 mov -0x8(%ebp),%eax
-4000622e: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40006234: eb 30 jmp 40006266 <jvprintf+0xdf4>
-40006236: 83 ec 04 sub $0x4,%esp
-40006239: 6a ff push $0xffffffff
-4000623b: ff 75 d4 pushl -0x2c(%ebp)
-4000623e: ff 75 08 pushl 0x8(%ebp)
-40006241: e8 a7 f1 ff ff call 400053ed <jprintf_putsn>
-40006246: 83 c4 10 add $0x10,%esp
-40006249: 89 45 fc mov %eax,-0x4(%ebp)
-4000624c: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40006250: 79 0b jns 4000625d <jvprintf+0xdeb>
-40006252: 8b 4d fc mov -0x4(%ebp),%ecx
-40006255: 89 8d e4 fe ff ff mov %ecx,-0x11c(%ebp)
-4000625b: eb 29 jmp 40006286 <jvprintf+0xe14>
-4000625d: 8b 45 fc mov -0x4(%ebp),%eax
-40006260: 01 85 58 ff ff ff add %eax,-0xa8(%ebp)
-40006266: 8b 45 0c mov 0xc(%ebp),%eax
-40006269: 40 inc %eax
-4000626a: 89 45 0c mov %eax,0xc(%ebp)
-4000626d: 8b 45 0c mov 0xc(%ebp),%eax
-40006270: 8a 00 mov (%eax),%al
-40006272: 84 c0 test %al,%al
-40006274: 0f 85 10 f2 ff ff jne 4000548a <jvprintf+0x18>
-4000627a: 8b 85 58 ff ff ff mov -0xa8(%ebp),%eax
-40006280: 89 85 e4 fe ff ff mov %eax,-0x11c(%ebp)
-40006286: 8b 85 e4 fe ff ff mov -0x11c(%ebp),%eax
-4000628c: c9 leave
-4000628d: c3 ret
-4000628e: 90 nop
-4000628f: 90 nop
-
-40006290 <printf_putc>:
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-40006290: 55 push %ebp
-40006291: 89 e5 mov %esp,%ebp
-40006293: 83 ec 08 sub $0x8,%esp
-40006296: 8b 45 0c mov 0xc(%ebp),%eax
-40006299: 88 45 fc mov %al,-0x4(%ebp)
-
-4000629c: 0f be 45 fc movsbl -0x4(%ebp),%eax
-400062a0: 83 ec 0c sub $0xc,%esp
-400062a3: 50 push %eax
-400062a4: e8 38 03 00 00 call 400065e1 <putchar>
-400062a9: 83 c4 10 add $0x10,%esp
-#include "device.h"
-
-400062ac: b8 01 00 00 00 mov $0x1,%eax
-
-400062b1: c9 leave
-400062b2: c3 ret
-
-400062b3 <printf_putsn>:
-/**
- * ATA-Geraet identifizieren
- *
-400062b3: 55 push %ebp
-400062b4: 89 e5 mov %esp,%ebp
-400062b6: 83 ec 18 sub $0x18,%esp
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-400062b9: 83 ec 0c sub $0xc,%esp
-400062bc: ff 75 0c pushl 0xc(%ebp)
-400062bf: e8 b0 2f 00 00 call 40009274 <strlen>
-400062c4: 83 c4 10 add $0x10,%esp
-400062c7: 89 45 fc mov %eax,-0x4(%ebp)
- */
-int ata_drv_identify(struct ata_device* dev)
-400062ca: 8b 45 fc mov -0x4(%ebp),%eax
-400062cd: 3b 45 10 cmp 0x10(%ebp),%eax
-400062d0: 7e 06 jle 400062d8 <printf_putsn+0x25>
-400062d2: 83 7d 10 ff cmpl $0xffffffff,0x10(%ebp)
-400062d6: 75 17 jne 400062ef <printf_putsn+0x3c>
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-400062d8: 8b 45 fc mov -0x4(%ebp),%eax
-400062db: 83 ec 08 sub $0x8,%esp
-400062de: ff 75 0c pushl 0xc(%ebp)
-400062e1: 50 push %eax
-400062e2: e8 f5 01 00 00 call 400064dc <putsn>
-400062e7: 83 c4 10 add $0x10,%esp
-400062ea: 89 45 ec mov %eax,-0x14(%ebp)
-400062ed: eb 15 jmp 40006304 <printf_putsn+0x51>
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-400062ef: 8b 45 10 mov 0x10(%ebp),%eax
-400062f2: 83 ec 08 sub $0x8,%esp
-400062f5: ff 75 0c pushl 0xc(%ebp)
-400062f8: 50 push %eax
-400062f9: e8 de 01 00 00 call 400064dc <putsn>
-400062fe: 83 c4 10 add $0x10,%esp
-40006301: 89 45 ec mov %eax,-0x14(%ebp)
-40006304: 8b 45 ec mov -0x14(%ebp),%eax
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-40006307: c9 leave
-40006308: c3 ret
-
-40006309 <vprintf>:
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40006309: 55 push %ebp
-4000630a: 89 e5 mov %esp,%ebp
-4000630c: 57 push %edi
-4000630d: 56 push %esi
-4000630e: 83 ec 10 sub $0x10,%esp
- .registers.ata.command = IDENTIFY_DEVICE,
-40006311: 8d 7d ec lea -0x14(%ebp),%edi
-40006314: be bc 9b 00 40 mov $0x40009bbc,%esi
-40006319: fc cld
-4000631a: a5 movsl %ds:(%esi),%es:(%edi)
-4000631b: a5 movsl %ds:(%esi),%es:(%edi)
-4000631c: a5 movsl %ds:(%esi),%es:(%edi)
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-4000631d: 83 ec 04 sub $0x4,%esp
-40006320: ff 75 0c pushl 0xc(%ebp)
-40006323: ff 75 08 pushl 0x8(%ebp)
-40006326: 8d 45 ec lea -0x14(%ebp),%eax
-40006329: 50 push %eax
-4000632a: e8 43 f1 ff ff call 40005472 <jvprintf>
-4000632f: 83 c4 10 add $0x10,%esp
- .buffer = buffer,
-40006332: 8d 65 f8 lea -0x8(%ebp),%esp
-40006335: 5e pop %esi
-40006336: 5f pop %edi
-40006337: c9 leave
-40006338: c3 ret
-
-40006339 <printf>:
-
- .error = 0
- };
-40006339: 55 push %ebp
-4000633a: 89 e5 mov %esp,%ebp
-4000633c: 83 ec 18 sub $0x18,%esp
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-4000633f: 8d 45 0c lea 0xc(%ebp),%eax
-40006342: 89 45 f8 mov %eax,-0x8(%ebp)
- // IDENTIFY PACKET DEVICE probieren.
-40006345: 8b 45 f8 mov -0x8(%ebp),%eax
-40006348: 83 ec 08 sub $0x8,%esp
-4000634b: 50 push %eax
-4000634c: ff 75 08 pushl 0x8(%ebp)
-4000634f: e8 b5 ff ff ff call 40006309 <vprintf>
-40006354: 83 c4 10 add $0x10,%esp
-40006357: 89 45 fc mov %eax,-0x4(%ebp)
- return atapi_drv_identify(dev);
- }
-
-4000635a: 8b 45 fc mov -0x4(%ebp),%eax
- // Ein ATA-Geraet
-4000635d: c9 leave
-4000635e: c3 ret
-4000635f: 90 nop
-
-40006360 <stdio_init>:
-#include "device.h"
-
-
-/**
- * ATA-Geraet identifizieren
- *
-40006360: 55 push %ebp
-40006361: 89 e5 mov %esp,%ebp
-40006363: 81 ec 98 00 00 00 sub $0x98,%esp
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-
-40006369: 83 ec 08 sub $0x8,%esp
-4000636c: 68 c8 9b 00 40 push $0x40009bc8
-40006371: 68 ca 9b 00 40 push $0x40009bca
-40006376: e8 5d e1 ff ff call 400044d8 <fopen>
-4000637b: 83 c4 10 add $0x10,%esp
-4000637e: 89 45 f8 mov %eax,-0x8(%ebp)
- // Request vorbereiten
-40006381: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40006385: 75 0c jne 40006393 <stdio_init+0x33>
- struct ata_request request = {
- .dev = dev,
-40006387: c7 05 00 a6 00 40 00 movl $0x0,0x4000a600
-4000638e: 00 00 00
-40006391: eb 51 jmp 400063e4 <stdio_init+0x84>
-
- .flags.direction = READ,
- .flags.poll = 1,
-40006393: ff 75 f8 pushl -0x8(%ebp)
-40006396: 68 80 00 00 00 push $0x80
-4000639b: 6a 01 push $0x1
-4000639d: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-400063a3: 50 push %eax
-400063a4: e8 68 e3 ff ff call 40004711 <fread>
-400063a9: 83 c4 10 add $0x10,%esp
-400063ac: 89 45 fc mov %eax,-0x4(%ebp)
- .flags.lba = 0,
-400063af: 8b 45 fc mov -0x4(%ebp),%eax
-400063b2: c6 84 05 77 ff ff ff movb $0x0,-0x89(%ebp,%eax,1)
-400063b9: 00
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-400063ba: 83 ec 08 sub $0x8,%esp
-400063bd: 68 d9 9b 00 40 push $0x40009bd9
-400063c2: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-400063c8: 50 push %eax
-400063c9: e8 0a e1 ff ff call 400044d8 <fopen>
-400063ce: 83 c4 10 add $0x10,%esp
-400063d1: a3 00 a6 00 40 mov %eax,0x4000a600
- .registers.ata.command = IDENTIFY_DEVICE,
-400063d6: 83 ec 0c sub $0xc,%esp
-400063d9: ff 75 f8 pushl -0x8(%ebp)
-400063dc: e8 d9 e2 ff ff call 400046ba <fclose>
-400063e1: 83 c4 10 add $0x10,%esp
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-400063e4: 83 ec 08 sub $0x8,%esp
-400063e7: 68 c8 9b 00 40 push $0x40009bc8
-400063ec: 68 dc 9b 00 40 push $0x40009bdc
-400063f1: e8 e2 e0 ff ff call 400044d8 <fopen>
-400063f6: 83 c4 10 add $0x10,%esp
-400063f9: 89 45 f8 mov %eax,-0x8(%ebp)
- .error = 0
-400063fc: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40006400: 75 0c jne 4000640e <stdio_init+0xae>
- };
-
-40006402: c7 05 04 a6 00 40 00 movl $0x0,0x4000a604
-40006409: 00 00 00
-4000640c: eb 51 jmp 4000645f <stdio_init+0xff>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-4000640e: ff 75 f8 pushl -0x8(%ebp)
-40006411: 68 80 00 00 00 push $0x80
-40006416: 6a 01 push $0x1
-40006418: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-4000641e: 50 push %eax
-4000641f: e8 ed e2 ff ff call 40004711 <fread>
-40006424: 83 c4 10 add $0x10,%esp
-40006427: 89 45 fc mov %eax,-0x4(%ebp)
- // IDENTIFY PACKET DEVICE probieren.
-4000642a: 8b 45 fc mov -0x4(%ebp),%eax
-4000642d: c6 84 05 77 ff ff ff movb $0x0,-0x89(%ebp,%eax,1)
-40006434: 00
- return atapi_drv_identify(dev);
- }
-
-40006435: 83 ec 08 sub $0x8,%esp
-40006438: 68 ec 9b 00 40 push $0x40009bec
-4000643d: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-40006443: 50 push %eax
-40006444: e8 8f e0 ff ff call 400044d8 <fopen>
-40006449: 83 c4 10 add $0x10,%esp
-4000644c: a3 04 a6 00 40 mov %eax,0x4000a604
- // Ein ATA-Geraet
-40006451: 83 ec 0c sub $0xc,%esp
-40006454: ff 75 f8 pushl -0x8(%ebp)
-40006457: e8 5e e2 ff ff call 400046ba <fclose>
-4000645c: 83 c4 10 add $0x10,%esp
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-4000645f: 83 ec 08 sub $0x8,%esp
-40006462: 68 c8 9b 00 40 push $0x40009bc8
-40006467: 68 ee 9b 00 40 push $0x40009bee
-4000646c: e8 67 e0 ff ff call 400044d8 <fopen>
-40006471: 83 c4 10 add $0x10,%esp
-40006474: 89 45 f8 mov %eax,-0x8(%ebp)
- return 1;
-40006477: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-4000647b: 75 0c jne 40006489 <stdio_init+0x129>
-}
-
-4000647d: c7 05 08 a6 00 40 00 movl $0x0,0x4000a608
-40006484: 00 00 00
-40006487: eb 51 jmp 400064da <stdio_init+0x17a>
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-40006489: ff 75 f8 pushl -0x8(%ebp)
-4000648c: 68 80 00 00 00 push $0x80
-40006491: 6a 01 push $0x1
-40006493: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-40006499: 50 push %eax
-4000649a: e8 72 e2 ff ff call 40004711 <fread>
-4000649f: 83 c4 10 add $0x10,%esp
-400064a2: 89 45 fc mov %eax,-0x4(%ebp)
- * @param start LBA des Startsektors
-400064a5: 8b 45 fc mov -0x4(%ebp),%eax
-400064a8: c6 84 05 77 ff ff ff movb $0x0,-0x89(%ebp,%eax,1)
-400064af: 00
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-400064b0: 83 ec 08 sub $0x8,%esp
-400064b3: 68 ec 9b 00 40 push $0x40009bec
-400064b8: 8d 85 77 ff ff ff lea -0x89(%ebp),%eax
-400064be: 50 push %eax
-400064bf: e8 14 e0 ff ff call 400044d8 <fopen>
-400064c4: 83 c4 10 add $0x10,%esp
-400064c7: a3 08 a6 00 40 mov %eax,0x4000a608
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-400064cc: 83 ec 0c sub $0xc,%esp
-400064cf: ff 75 f8 pushl -0x8(%ebp)
-400064d2: e8 e3 e1 ff ff call 400046ba <fclose>
-400064d7: 83 c4 10 add $0x10,%esp
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-400064da: c9 leave
-400064db: c3 ret
-
-400064dc <putsn>:
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-400064dc: 55 push %ebp
-400064dd: 89 e5 mov %esp,%ebp
-400064df: 83 ec 08 sub $0x8,%esp
-
-400064e2: a1 04 a6 00 40 mov 0x4000a604,%eax
-400064e7: 85 c0 test %eax,%eax
-400064e9: 75 19 jne 40006504 <putsn+0x28>
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-400064eb: 83 ec 08 sub $0x8,%esp
-400064ee: ff 75 0c pushl 0xc(%ebp)
-400064f1: ff 75 08 pushl 0x8(%ebp)
-400064f4: e8 97 06 00 00 call 40006b90 <syscall_putsn>
-400064f9: 83 c4 10 add $0x10,%esp
- while (count_left > 0) {
-400064fc: 8b 45 08 mov 0x8(%ebp),%eax
-400064ff: 89 45 fc mov %eax,-0x4(%ebp)
-40006502: eb 2a jmp 4000652e <putsn+0x52>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
-40006504: a1 04 a6 00 40 mov 0x4000a604,%eax
-40006509: 50 push %eax
-4000650a: 6a 01 push $0x1
-4000650c: ff 75 08 pushl 0x8(%ebp)
-4000650f: ff 75 0c pushl 0xc(%ebp)
-40006512: e8 76 e7 ff ff call 40004c8d <fwrite>
-40006517: 83 c4 10 add $0x10,%esp
-4000651a: 83 f8 ff cmp $0xffffffff,%eax
-4000651d: 75 09 jne 40006528 <putsn+0x4c>
- current_count = 256;
-4000651f: c7 45 fc ff ff ff ff movl $0xffffffff,-0x4(%ebp)
-40006526: eb 06 jmp 4000652e <putsn+0x52>
- } else {
- current_count = count_left;
-40006528: 8b 45 08 mov 0x8(%ebp),%eax
-4000652b: 89 45 fc mov %eax,-0x4(%ebp)
-4000652e: 8b 45 fc mov -0x4(%ebp),%eax
- }
-
- // Request vorbereiten
-40006531: c9 leave
-40006532: c3 ret
-
-40006533 <puts>:
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
-40006533: 55 push %ebp
-40006534: 89 e5 mov %esp,%ebp
-40006536: 83 ec 08 sub $0x8,%esp
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40006539: 83 ec 0c sub $0xc,%esp
-4000653c: ff 75 08 pushl 0x8(%ebp)
-4000653f: e8 30 2d 00 00 call 40009274 <strlen>
-40006544: 83 c4 10 add $0x10,%esp
-40006547: 83 ec 08 sub $0x8,%esp
-4000654a: ff 75 08 pushl 0x8(%ebp)
-4000654d: 50 push %eax
-4000654e: e8 89 ff ff ff call 400064dc <putsn>
-40006553: 83 c4 10 add $0x10,%esp
-40006556: 83 f8 ff cmp $0xffffffff,%eax
-40006559: 75 09 jne 40006564 <puts+0x31>
- // 0 steht.
-4000655b: c7 45 fc ff ff ff ff movl $0xffffffff,-0x4(%ebp)
-40006562: eb 31 jmp 40006595 <puts+0x62>
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-40006564: a1 04 a6 00 40 mov 0x4000a604,%eax
-40006569: 85 c0 test %eax,%eax
-4000656b: 75 14 jne 40006581 <puts+0x4e>
-
-4000656d: 83 ec 08 sub $0x8,%esp
-40006570: 68 fe 9b 00 40 push $0x40009bfe
-40006575: 6a 01 push $0x1
-40006577: e8 14 06 00 00 call 40006b90 <syscall_putsn>
-4000657c: 83 c4 10 add $0x10,%esp
-4000657f: eb 0d jmp 4000658e <puts+0x5b>
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
-40006581: 83 ec 0c sub $0xc,%esp
-40006584: 6a 0a push $0xa
-40006586: e8 56 00 00 00 call 400065e1 <putchar>
-4000658b: 83 c4 10 add $0x10,%esp
- request.blocks_done = 0;
- request.buffer = current_buffer;
-
-4000658e: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%ebp)
-40006595: 8b 45 fc mov -0x4(%ebp),%eax
- request.error = NO_ERROR;
-40006598: c9 leave
-40006599: c3 ret
-
-4000659a <putc>:
- result = 0;
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
-4000659a: 55 push %ebp
-4000659b: 89 e5 mov %esp,%ebp
-4000659d: 83 ec 18 sub $0x18,%esp
- count_left -= current_count;
-400065a0: a1 04 a6 00 40 mov 0x4000a604,%eax
-400065a5: 85 c0 test %eax,%eax
-400065a7: 75 1f jne 400065c8 <putc+0x2e>
- lba += current_count;
- }
-400065a9: 8b 45 08 mov 0x8(%ebp),%eax
-400065ac: 88 45 ff mov %al,-0x1(%ebp)
-
-400065af: 83 ec 08 sub $0x8,%esp
-400065b2: 8d 45 ff lea -0x1(%ebp),%eax
-400065b5: 50 push %eax
-400065b6: 6a 01 push $0x1
-400065b8: e8 d3 05 00 00 call 40006b90 <syscall_putsn>
-400065bd: 83 c4 10 add $0x10,%esp
- return result;
-}
-
-400065c0: 8b 45 08 mov 0x8(%ebp),%eax
-400065c3: 89 45 ec mov %eax,-0x14(%ebp)
-400065c6: eb 14 jmp 400065dc <putc+0x42>
- }
-
- return result;
-}
-
-400065c8: 83 ec 08 sub $0x8,%esp
-400065cb: ff 75 0c pushl 0xc(%ebp)
-400065ce: ff 75 08 pushl 0x8(%ebp)
-400065d1: e8 90 e8 ff ff call 40004e66 <fputc>
-400065d6: 83 c4 10 add $0x10,%esp
-400065d9: 89 45 ec mov %eax,-0x14(%ebp)
-400065dc: 8b 45 ec mov -0x14(%ebp),%eax
-400065df: c9 leave
-400065e0: c3 ret
-
-400065e1 <putchar>:
-400065e1: 55 push %ebp
-400065e2: 89 e5 mov %esp,%ebp
-400065e4: 83 ec 18 sub $0x18,%esp
-400065e7: a1 04 a6 00 40 mov 0x4000a604,%eax
-400065ec: 85 c0 test %eax,%eax
-400065ee: 75 1f jne 4000660f <putchar+0x2e>
-400065f0: 8b 45 08 mov 0x8(%ebp),%eax
-400065f3: 88 45 ff mov %al,-0x1(%ebp)
-400065f6: 83 ec 08 sub $0x8,%esp
-400065f9: 8d 45 ff lea -0x1(%ebp),%eax
-400065fc: 50 push %eax
-400065fd: 6a 01 push $0x1
-400065ff: e8 8c 05 00 00 call 40006b90 <syscall_putsn>
-40006604: 83 c4 10 add $0x10,%esp
-40006607: 8b 45 08 mov 0x8(%ebp),%eax
-4000660a: 89 45 ec mov %eax,-0x14(%ebp)
-4000660d: eb 17 jmp 40006626 <putchar+0x45>
-4000660f: a1 04 a6 00 40 mov 0x4000a604,%eax
-40006614: 83 ec 08 sub $0x8,%esp
-40006617: 50 push %eax
-40006618: ff 75 08 pushl 0x8(%ebp)
-4000661b: e8 46 e8 ff ff call 40004e66 <fputc>
-40006620: 83 c4 10 add $0x10,%esp
-40006623: 89 45 ec mov %eax,-0x14(%ebp)
-40006626: 8b 45 ec mov -0x14(%ebp),%eax
-40006629: c9 leave
-4000662a: c3 ret
-
-4000662b <getc>:
-4000662b: 55 push %ebp
-4000662c: 89 e5 mov %esp,%ebp
-4000662e: 83 ec 08 sub $0x8,%esp
-40006631: 83 ec 0c sub $0xc,%esp
-40006634: ff 75 08 pushl 0x8(%ebp)
-40006637: e8 b6 e3 ff ff call 400049f2 <fgetc>
-4000663c: 83 c4 10 add $0x10,%esp
-4000663f: c9 leave
-40006640: c3 ret
-
-40006641 <getchar>:
-40006641: 55 push %ebp
-40006642: 89 e5 mov %esp,%ebp
-40006644: 83 ec 08 sub $0x8,%esp
-40006647: a1 00 a6 00 40 mov 0x4000a600,%eax
-4000664c: 83 ec 0c sub $0xc,%esp
-4000664f: 50 push %eax
-40006650: e8 9d e3 ff ff call 400049f2 <fgetc>
-40006655: 83 c4 10 add $0x10,%esp
-40006658: c9 leave
-40006659: c3 ret
-
-4000665a <gets>:
-4000665a: 55 push %ebp
-4000665b: 89 e5 mov %esp,%ebp
-4000665d: 83 ec 18 sub $0x18,%esp
-40006660: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40006667: eb 67 jmp 400066d0 <gets+0x76>
-40006669: e8 d3 ff ff ff call 40006641 <getchar>
-4000666e: 89 45 fc mov %eax,-0x4(%ebp)
-40006671: 83 7d fc ff cmpl $0xffffffff,-0x4(%ebp)
-40006675: 75 35 jne 400066ac <gets+0x52>
-40006677: a1 00 a6 00 40 mov 0x4000a600,%eax
-4000667c: 83 ec 0c sub $0xc,%esp
-4000667f: 50 push %eax
-40006680: e8 e5 e9 ff ff call 4000506a <ferror>
-40006685: 83 c4 10 add $0x10,%esp
-40006688: 85 c0 test %eax,%eax
-4000668a: 74 09 je 40006695 <gets+0x3b>
-4000668c: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40006693: eb 5f jmp 400066f4 <gets+0x9a>
-40006695: a1 00 a6 00 40 mov 0x4000a600,%eax
-4000669a: 83 ec 0c sub $0xc,%esp
-4000669d: 50 push %eax
-4000669e: e8 5d e9 ff ff call 40005000 <feof>
-400066a3: 83 c4 10 add $0x10,%esp
-400066a6: 85 c0 test %eax,%eax
-400066a8: 75 3b jne 400066e5 <gets+0x8b>
-400066aa: eb 24 jmp 400066d0 <gets+0x76>
-400066ac: 83 ec 0c sub $0xc,%esp
-400066af: ff 75 fc pushl -0x4(%ebp)
-400066b2: e8 2a ff ff ff call 400065e1 <putchar>
-400066b7: 83 c4 10 add $0x10,%esp
-400066ba: 83 7d fc 0a cmpl $0xa,-0x4(%ebp)
-400066be: 74 25 je 400066e5 <gets+0x8b>
-400066c0: 8b 45 f8 mov -0x8(%ebp),%eax
-400066c3: 89 c2 mov %eax,%edx
-400066c5: 03 55 08 add 0x8(%ebp),%edx
-400066c8: 8b 45 fc mov -0x4(%ebp),%eax
-400066cb: 88 02 mov %al,(%edx)
-400066cd: ff 45 f8 incl -0x8(%ebp)
-400066d0: a1 00 a6 00 40 mov 0x4000a600,%eax
-400066d5: 83 ec 0c sub $0xc,%esp
-400066d8: 50 push %eax
-400066d9: e8 8c e9 ff ff call 4000506a <ferror>
-400066de: 83 c4 10 add $0x10,%esp
-400066e1: 85 c0 test %eax,%eax
-400066e3: 74 84 je 40006669 <gets+0xf>
-400066e5: 8b 45 f8 mov -0x8(%ebp),%eax
-400066e8: 03 45 08 add 0x8(%ebp),%eax
-400066eb: c6 00 00 movb $0x0,(%eax)
-400066ee: 8b 45 08 mov 0x8(%ebp),%eax
-400066f1: 89 45 ec mov %eax,-0x14(%ebp)
-400066f4: 8b 45 ec mov -0x14(%ebp),%eax
-400066f7: c9 leave
-400066f8: c3 ret
-
-400066f9 <perror>:
-400066f9: 55 push %ebp
-400066fa: 89 e5 mov %esp,%ebp
-400066fc: 83 ec 08 sub $0x8,%esp
-400066ff: a1 28 a8 00 40 mov 0x4000a828,%eax
-40006704: 83 ec 04 sub $0x4,%esp
-40006707: 50 push %eax
-40006708: ff 75 08 pushl 0x8(%ebp)
-4000670b: 68 00 9c 00 40 push $0x40009c00
-40006710: e8 24 fc ff ff call 40006339 <printf>
-40006715: 83 c4 10 add $0x10,%esp
-40006718: c9 leave
-40006719: c3 ret
-4000671a: 90 nop
-4000671b: 90 nop
-
-4000671c <lostio_type_directory_use_as>:
- * Sollte vom Elternprozess geerbt werden)
- * @param args Pointer auf die Kommandozeilen-Parameter
- * @param parent Prozessnummer des Elternprozesses, dem der neue Task
- * untergeordenet werden soll, oder 0 fuer den aktuellen Prozess.
- *
- * @return Prozessnummer
-4000671c: 55 push %ebp
-4000671d: 89 e5 mov %esp,%ebp
-4000671f: 83 ec 18 sub $0x18,%esp
-40006722: 8b 45 08 mov 0x8(%ebp),%eax
-40006725: 88 45 ec mov %al,-0x14(%ebp)
- */
-40006728: 83 ec 0c sub $0xc,%esp
-4000672b: 6a 28 push $0x28
-4000672d: e8 a6 1b 00 00 call 400082d8 <malloc>
-40006732: 83 c4 10 add $0x10,%esp
-40006735: 89 45 fc mov %eax,-0x4(%ebp)
-pid_t create_process(dword initial_eip, uid_t uid, const char* args, pid_t parent)
-{
-40006738: 8b 55 fc mov -0x4(%ebp),%edx
-4000673b: 8a 45 ec mov -0x14(%ebp),%al
-4000673e: 88 02 mov %al,(%edx)
- pid_t pid;
-40006740: 8b 45 fc mov -0x4(%ebp),%eax
-40006743: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
-
-4000674a: 8b 45 fc mov -0x4(%ebp),%eax
-4000674d: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
- asm(
-40006754: 8b 45 fc mov -0x4(%ebp),%eax
-40006757: c7 40 0c 00 00 00 00 movl $0x0,0xc(%eax)
- "pushl %5;"
-4000675e: 8b 45 fc mov -0x4(%ebp),%eax
-40006761: c7 40 10 bf 67 00 40 movl $0x400067bf,0x10(%eax)
- "pushl %4;"
-40006768: 8b 45 fc mov -0x4(%ebp),%eax
-4000676b: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax)
- "pushl %3;"
-40006772: 8b 45 fc mov -0x4(%ebp),%eax
-40006775: c7 40 18 d6 69 00 40 movl $0x400069d6,0x18(%eax)
- "pushl %2;"
-4000677c: 8b 45 fc mov -0x4(%ebp),%eax
-4000677f: c7 40 1c 00 00 00 00 movl $0x0,0x1c(%eax)
- "mov %1, %%eax;"
-40006786: 8b 45 fc mov -0x4(%ebp),%eax
-40006789: c7 40 20 00 00 00 00 movl $0x0,0x20(%eax)
- "int $0x30;"
-40006790: 8b 45 fc mov -0x4(%ebp),%eax
-40006793: c7 40 24 00 00 00 00 movl $0x0,0x24(%eax)
- "add $0x10, %%esp;"
- : "=a" (pid) : "i" (SYSCALL_PM_CREATE_PROCESS), "r" (initial_eip), "r" (uid), "r" (args), "r" (parent));
-4000679a: 83 ec 0c sub $0xc,%esp
-4000679d: ff 75 fc pushl -0x4(%ebp)
-400067a0: e8 3f d2 ff ff call 400039e4 <lostio_register_typehandle>
-400067a5: 83 c4 10 add $0x10,%esp
- return pid;
-400067a8: c9 leave
-400067a9: c3 ret
-
-400067aa <lostio_type_directory_use>:
-
-
-/**
- * Den aktuellen Prozess beenden. TODO: Sollte auch mit Kinderprozessen
- * moeglich sein.
- */
-400067aa: 55 push %ebp
-400067ab: 89 e5 mov %esp,%ebp
-400067ad: 83 ec 08 sub $0x8,%esp
-void destroy_process()
-400067b0: 83 ec 0c sub $0xc,%esp
-400067b3: 6a 01 push $0x1
-400067b5: e8 62 ff ff ff call 4000671c <lostio_type_directory_use_as>
-400067ba: 83 c4 10 add $0x10,%esp
-{
-400067bd: c9 leave
-400067be: c3 ret
-
-400067bf <dir_read>:
- "int $0x30;"
- : : "i" (SYSCALL_PM_EXIT_PROCESS));
-}
-
-
-/**
-400067bf: 55 push %ebp
-400067c0: 89 e5 mov %esp,%ebp
-400067c2: 57 push %edi
-400067c3: 56 push %esi
-400067c4: 53 push %ebx
-400067c5: 83 ec 4c sub $0x4c,%esp
- * Pointer auf die Kommandozeilen-Argumente vom Kernel holen. Diese werden
- * einfach als normaler String zurueckgegeben. Das Parsen ist sache des
- * Prozesses.
- *
- * @return Pointer auf den Argument-String
- */
-400067c8: 8b 45 14 mov 0x14(%ebp),%eax
-400067cb: 89 45 e0 mov %eax,-0x20(%ebp)
-char* get_cmdline()
-{
-400067ce: 8b 45 0c mov 0xc(%ebp),%eax
-400067d1: 8b 48 10 mov 0x10(%eax),%ecx
-400067d4: 8b 58 14 mov 0x14(%eax),%ebx
-400067d7: 8b 45 e0 mov -0x20(%ebp),%eax
-400067da: ba 00 00 00 00 mov $0x0,%edx
-400067df: 89 ce mov %ecx,%esi
-400067e1: 89 df mov %ebx,%edi
-400067e3: 01 c6 add %eax,%esi
-400067e5: 11 d7 adc %edx,%edi
-400067e7: 89 75 b0 mov %esi,-0x50(%ebp)
-400067ea: 89 7d b4 mov %edi,-0x4c(%ebp)
-400067ed: 8b 45 0c mov 0xc(%ebp),%eax
-400067f0: 8b 40 1c mov 0x1c(%eax),%eax
-400067f3: 8b 50 08 mov 0x8(%eax),%edx
-400067f6: 8b 48 0c mov 0xc(%eax),%ecx
-400067f9: 89 55 b8 mov %edx,-0x48(%ebp)
-400067fc: 89 4d bc mov %ecx,-0x44(%ebp)
-400067ff: 8b 4d bc mov -0x44(%ebp),%ecx
-40006802: 39 4d b4 cmp %ecx,-0x4c(%ebp)
-40006805: 72 30 jb 40006837 <dir_read+0x78>
-40006807: 8b 75 bc mov -0x44(%ebp),%esi
-4000680a: 39 75 b4 cmp %esi,-0x4c(%ebp)
-4000680d: 77 08 ja 40006817 <dir_read+0x58>
-4000680f: 8b 7d b8 mov -0x48(%ebp),%edi
-40006812: 39 7d b0 cmp %edi,-0x50(%ebp)
-40006815: 76 20 jbe 40006837 <dir_read+0x78>
- char* result;
- asm(
-40006817: 8b 45 0c mov 0xc(%ebp),%eax
-4000681a: 8b 40 1c mov 0x1c(%eax),%eax
-4000681d: 8b 50 0c mov 0xc(%eax),%edx
-40006820: 8b 40 08 mov 0x8(%eax),%eax
-40006823: 89 c1 mov %eax,%ecx
-40006825: 8b 45 0c mov 0xc(%ebp),%eax
-40006828: 8b 50 14 mov 0x14(%eax),%edx
-4000682b: 8b 40 10 mov 0x10(%eax),%eax
-4000682e: 89 ca mov %ecx,%edx
-40006830: 29 c2 sub %eax,%edx
-40006832: 89 d0 mov %edx,%eax
-40006834: 89 45 e0 mov %eax,-0x20(%ebp)
- "mov %1, %%eax;"
- "int $0x30;"
- : "=a" (result) : "i" (SYSCALL_PM_GET_CMDLINE));
-
-40006837: 8b 55 e0 mov -0x20(%ebp),%edx
-4000683a: 89 d0 mov %edx,%eax
-4000683c: c1 e0 03 shl $0x3,%eax
-4000683f: 01 d0 add %edx,%eax
-40006841: c1 e0 05 shl $0x5,%eax
-40006844: 89 45 e0 mov %eax,-0x20(%ebp)
- return result;
-40006847: 8b 45 e0 mov -0x20(%ebp),%eax
-4000684a: 83 ec 0c sub $0xc,%esp
-4000684d: 50 push %eax
-4000684e: e8 85 1a 00 00 call 400082d8 <malloc>
-40006853: 83 c4 10 add $0x10,%esp
-40006856: 89 45 dc mov %eax,-0x24(%ebp)
-}
-40006859: 8b 45 dc mov -0x24(%ebp),%eax
-4000685c: 89 45 ec mov %eax,-0x14(%ebp)
-4000685f: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40006866: e9 9f 00 00 00 jmp 4000690a <dir_read+0x14b>
-4000686b: 8b 45 0c mov 0xc(%ebp),%eax
-4000686e: 8b 50 14 mov 0x14(%eax),%edx
-40006871: 8b 40 10 mov 0x10(%eax),%eax
-40006874: 89 c2 mov %eax,%edx
-40006876: 8b 45 e8 mov -0x18(%ebp),%eax
-40006879: 8d 04 02 lea (%edx,%eax,1),%eax
-4000687c: 89 c2 mov %eax,%edx
-4000687e: 8b 45 0c mov 0xc(%ebp),%eax
-40006881: 8b 40 1c mov 0x1c(%eax),%eax
-40006884: 8b 40 20 mov 0x20(%eax),%eax
-40006887: 83 ec 08 sub $0x8,%esp
-4000688a: 52 push %edx
-4000688b: 50 push %eax
-4000688c: e8 fc 15 00 00 call 40007e8d <list_get_element_at>
-40006891: 83 c4 10 add $0x10,%esp
-40006894: 89 45 e4 mov %eax,-0x1c(%ebp)
-40006897: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000689a: 8b 50 0c mov 0xc(%eax),%edx
-4000689d: 8b 40 08 mov 0x8(%eax),%eax
-400068a0: 8b 4d ec mov -0x14(%ebp),%ecx
-400068a3: 89 81 00 01 00 00 mov %eax,0x100(%ecx)
-400068a9: 89 91 04 01 00 00 mov %edx,0x104(%ecx)
-400068af: 8b 45 e4 mov -0x1c(%ebp),%eax
-400068b2: 8b 40 04 mov 0x4(%eax),%eax
-400068b5: 83 ec 0c sub $0xc,%esp
-400068b8: 50 push %eax
-400068b9: e8 b6 29 00 00 call 40009274 <strlen>
-400068be: 83 c4 10 add $0x10,%esp
-400068c1: 8d 50 01 lea 0x1(%eax),%edx
-400068c4: 8b 45 e4 mov -0x1c(%ebp),%eax
-400068c7: 8b 40 04 mov 0x4(%eax),%eax
-400068ca: 8b 4d ec mov -0x14(%ebp),%ecx
-400068cd: 83 ec 04 sub $0x4,%esp
-400068d0: 52 push %edx
-400068d1: 50 push %eax
-400068d2: 51 push %ecx
-400068d3: e8 90 26 00 00 call 40008f68 <memcpy>
-400068d8: 83 c4 10 add $0x10,%esp
-400068db: 8b 45 e4 mov -0x1c(%ebp),%eax
-400068de: 8b 40 1c mov 0x1c(%eax),%eax
-400068e1: 25 00 00 02 00 and $0x20000,%eax
-400068e6: 85 c0 test %eax,%eax
-400068e8: 74 0c je 400068f6 <dir_read+0x137>
-400068ea: 8b 45 ec mov -0x14(%ebp),%eax
-400068ed: c6 80 ff 00 00 00 02 movb $0x2,0xff(%eax)
-400068f4: eb 0a jmp 40006900 <dir_read+0x141>
-400068f6: 8b 45 ec mov -0x14(%ebp),%eax
-400068f9: c6 80 ff 00 00 00 01 movb $0x1,0xff(%eax)
-40006900: 81 45 ec 20 01 00 00 addl $0x120,-0x14(%ebp)
- return result;
-}
-40006907: ff 45 e8 incl -0x18(%ebp)
-4000690a: 8b 4d e8 mov -0x18(%ebp),%ecx
-4000690d: 8b 55 e0 mov -0x20(%ebp),%edx
-40006910: c7 45 ac 39 8e e3 38 movl $0x38e38e39,-0x54(%ebp)
-40006917: 8b 45 ac mov -0x54(%ebp),%eax
-4000691a: f7 e2 mul %edx
-4000691c: 89 d0 mov %edx,%eax
-4000691e: c1 e8 06 shr $0x6,%eax
-40006921: 39 c1 cmp %eax,%ecx
-40006923: 0f 82 42 ff ff ff jb 4000686b <dir_read+0xac>
-40006929: 8b 45 0c mov 0xc(%ebp),%eax
-4000692c: 8b 48 10 mov 0x10(%eax),%ecx
-4000692f: 8b 58 14 mov 0x14(%eax),%ebx
-40006932: 8b 55 e0 mov -0x20(%ebp),%edx
-40006935: c7 45 ac 39 8e e3 38 movl $0x38e38e39,-0x54(%ebp)
-4000693c: 8b 45 ac mov -0x54(%ebp),%eax
-4000693f: f7 e2 mul %edx
-40006941: 89 d0 mov %edx,%eax
-40006943: c1 e8 06 shr $0x6,%eax
-40006946: ba 00 00 00 00 mov $0x0,%edx
-4000694b: 01 c8 add %ecx,%eax
-4000694d: 11 da adc %ebx,%edx
-4000694f: 8b 4d 0c mov 0xc(%ebp),%ecx
-40006952: 89 41 10 mov %eax,0x10(%ecx)
-40006955: 89 51 14 mov %edx,0x14(%ecx)
-40006958: 8b 45 0c mov 0xc(%ebp),%eax
-4000695b: 8b 50 10 mov 0x10(%eax),%edx
-4000695e: 8b 48 14 mov 0x14(%eax),%ecx
-40006961: 89 55 c0 mov %edx,-0x40(%ebp)
-40006964: 89 4d c4 mov %ecx,-0x3c(%ebp)
-40006967: 8b 45 0c mov 0xc(%ebp),%eax
-4000696a: 8b 40 1c mov 0x1c(%eax),%eax
-4000696d: 8b 70 08 mov 0x8(%eax),%esi
-40006970: 8b 78 0c mov 0xc(%eax),%edi
-40006973: 89 75 c8 mov %esi,-0x38(%ebp)
-40006976: 89 7d cc mov %edi,-0x34(%ebp)
-40006979: 8b 7d cc mov -0x34(%ebp),%edi
-4000697c: 39 7d c4 cmp %edi,-0x3c(%ebp)
-4000697f: 72 26 jb 400069a7 <dir_read+0x1e8>
-40006981: 8b 45 cc mov -0x34(%ebp),%eax
-40006984: 39 45 c4 cmp %eax,-0x3c(%ebp)
-40006987: 77 08 ja 40006991 <dir_read+0x1d2>
-40006989: 8b 55 c8 mov -0x38(%ebp),%edx
-4000698c: 39 55 c0 cmp %edx,-0x40(%ebp)
-4000698f: 72 16 jb 400069a7 <dir_read+0x1e8>
-40006991: 8b 45 0c mov 0xc(%ebp),%eax
-40006994: 8b 40 08 mov 0x8(%eax),%eax
-40006997: 89 c2 mov %eax,%edx
-40006999: 81 ca 00 00 01 00 or $0x10000,%edx
-4000699f: 8b 45 0c mov 0xc(%ebp),%eax
-400069a2: 89 50 08 mov %edx,0x8(%eax)
-400069a5: eb 14 jmp 400069bb <dir_read+0x1fc>
-400069a7: 8b 45 0c mov 0xc(%ebp),%eax
-400069aa: 8b 40 08 mov 0x8(%eax),%eax
-400069ad: 89 c2 mov %eax,%edx
-400069af: 81 e2 ff ff fe ff and $0xfffeffff,%edx
-400069b5: 8b 45 0c mov 0xc(%ebp),%eax
-400069b8: 89 50 08 mov %edx,0x8(%eax)
-400069bb: 8b 45 dc mov -0x24(%ebp),%eax
-400069be: 8b 55 e0 mov -0x20(%ebp),%edx
-400069c1: 8b 4d 08 mov 0x8(%ebp),%ecx
-400069c4: 89 01 mov %eax,(%ecx)
-400069c6: 89 51 04 mov %edx,0x4(%ecx)
-400069c9: 8b 45 08 mov 0x8(%ebp),%eax
-400069cc: 8d 65 f4 lea -0xc(%ebp),%esp
-400069cf: 5b pop %ebx
-400069d0: 5e pop %esi
-400069d1: 5f pop %edi
-400069d2: c9 leave
-400069d3: c2 04 00 ret $0x4
-
-400069d6 <dir_seek>:
-400069d6: 55 push %ebp
-400069d7: 89 e5 mov %esp,%ebp
-400069d9: 57 push %edi
-400069da: 56 push %esi
-400069db: 53 push %ebx
-400069dc: 83 ec 34 sub $0x34,%esp
-400069df: 8b 45 10 mov 0x10(%ebp),%eax
-400069e2: 89 45 c4 mov %eax,-0x3c(%ebp)
-400069e5: 83 7d c4 01 cmpl $0x1,-0x3c(%ebp)
-400069e9: 74 67 je 40006a52 <dir_seek+0x7c>
-400069eb: 83 7d c4 02 cmpl $0x2,-0x3c(%ebp)
-400069ef: 0f 84 d0 00 00 00 je 40006ac5 <dir_seek+0xef>
-400069f5: 83 7d c4 00 cmpl $0x0,-0x3c(%ebp)
-400069f9: 74 05 je 40006a00 <dir_seek+0x2a>
-400069fb: e9 da 00 00 00 jmp 40006ada <dir_seek+0x104>
-40006a00: 8b 45 0c mov 0xc(%ebp),%eax
-40006a03: 89 45 c8 mov %eax,-0x38(%ebp)
-40006a06: 99 cltd
-40006a07: 89 55 cc mov %edx,-0x34(%ebp)
-40006a0a: 8b 45 08 mov 0x8(%ebp),%eax
-40006a0d: 8b 40 1c mov 0x1c(%eax),%eax
-40006a10: 8b 70 08 mov 0x8(%eax),%esi
-40006a13: 8b 78 0c mov 0xc(%eax),%edi
-40006a16: 89 75 d0 mov %esi,-0x30(%ebp)
-40006a19: 89 7d d4 mov %edi,-0x2c(%ebp)
-40006a1c: 8b 7d d4 mov -0x2c(%ebp),%edi
-40006a1f: 39 7d cc cmp %edi,-0x34(%ebp)
-40006a22: 72 1c jb 40006a40 <dir_seek+0x6a>
-40006a24: 8b 45 d4 mov -0x2c(%ebp),%eax
-40006a27: 39 45 cc cmp %eax,-0x34(%ebp)
-40006a2a: 77 08 ja 40006a34 <dir_seek+0x5e>
-40006a2c: 8b 55 d0 mov -0x30(%ebp),%edx
-40006a2f: 39 55 c8 cmp %edx,-0x38(%ebp)
-40006a32: 76 0c jbe 40006a40 <dir_seek+0x6a>
-40006a34: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-40006a3b: e9 ec 00 00 00 jmp 40006b2c <dir_seek+0x156>
-40006a40: 8b 45 0c mov 0xc(%ebp),%eax
-40006a43: 99 cltd
-40006a44: 8b 4d 08 mov 0x8(%ebp),%ecx
-40006a47: 89 41 10 mov %eax,0x10(%ecx)
-40006a4a: 89 51 14 mov %edx,0x14(%ecx)
-40006a4d: e9 88 00 00 00 jmp 40006ada <dir_seek+0x104>
-40006a52: 8b 45 0c mov 0xc(%ebp),%eax
-40006a55: 89 c1 mov %eax,%ecx
-40006a57: 89 c3 mov %eax,%ebx
-40006a59: c1 fb 1f sar $0x1f,%ebx
-40006a5c: 8b 45 08 mov 0x8(%ebp),%eax
-40006a5f: 8b 50 14 mov 0x14(%eax),%edx
-40006a62: 8b 40 10 mov 0x10(%eax),%eax
-40006a65: 89 ce mov %ecx,%esi
-40006a67: 89 df mov %ebx,%edi
-40006a69: 01 c6 add %eax,%esi
-40006a6b: 11 d7 adc %edx,%edi
-40006a6d: 89 75 e0 mov %esi,-0x20(%ebp)
-40006a70: 89 7d e4 mov %edi,-0x1c(%ebp)
-40006a73: 8b 45 08 mov 0x8(%ebp),%eax
-40006a76: 8b 40 1c mov 0x1c(%eax),%eax
-40006a79: 8b 50 08 mov 0x8(%eax),%edx
-40006a7c: 8b 48 0c mov 0xc(%eax),%ecx
-40006a7f: 89 55 e8 mov %edx,-0x18(%ebp)
-40006a82: 89 4d ec mov %ecx,-0x14(%ebp)
-40006a85: 8b 4d ec mov -0x14(%ebp),%ecx
-40006a88: 39 4d e4 cmp %ecx,-0x1c(%ebp)
-40006a8b: 72 1c jb 40006aa9 <dir_seek+0xd3>
-40006a8d: 8b 75 ec mov -0x14(%ebp),%esi
-40006a90: 39 75 e4 cmp %esi,-0x1c(%ebp)
-40006a93: 77 08 ja 40006a9d <dir_seek+0xc7>
-40006a95: 8b 7d e8 mov -0x18(%ebp),%edi
-40006a98: 39 7d e0 cmp %edi,-0x20(%ebp)
-40006a9b: 76 0c jbe 40006aa9 <dir_seek+0xd3>
-40006a9d: c7 45 dc ff ff ff ff movl $0xffffffff,-0x24(%ebp)
-40006aa4: e9 83 00 00 00 jmp 40006b2c <dir_seek+0x156>
-40006aa9: 8b 45 08 mov 0x8(%ebp),%eax
-40006aac: 8b 48 10 mov 0x10(%eax),%ecx
-40006aaf: 8b 58 14 mov 0x14(%eax),%ebx
-40006ab2: 8b 45 0c mov 0xc(%ebp),%eax
-40006ab5: 99 cltd
-40006ab6: 01 c8 add %ecx,%eax
-40006ab8: 11 da adc %ebx,%edx
-40006aba: 8b 4d 08 mov 0x8(%ebp),%ecx
-40006abd: 89 41 10 mov %eax,0x10(%ecx)
-40006ac0: 89 51 14 mov %edx,0x14(%ecx)
-40006ac3: eb 15 jmp 40006ada <dir_seek+0x104>
-40006ac5: 8b 45 08 mov 0x8(%ebp),%eax
-40006ac8: 8b 40 1c mov 0x1c(%eax),%eax
-40006acb: 8b 50 0c mov 0xc(%eax),%edx
-40006ace: 8b 40 08 mov 0x8(%eax),%eax
-40006ad1: 8b 4d 08 mov 0x8(%ebp),%ecx
-40006ad4: 89 41 10 mov %eax,0x10(%ecx)
-40006ad7: 89 51 14 mov %edx,0x14(%ecx)
-40006ada: 8b 45 08 mov 0x8(%ebp),%eax
-40006add: 8b 48 10 mov 0x10(%eax),%ecx
-40006ae0: 8b 58 14 mov 0x14(%eax),%ebx
-40006ae3: 8b 45 08 mov 0x8(%ebp),%eax
-40006ae6: 8b 40 1c mov 0x1c(%eax),%eax
-40006ae9: 8b 50 0c mov 0xc(%eax),%edx
-40006aec: 8b 40 08 mov 0x8(%eax),%eax
-40006aef: 89 de mov %ebx,%esi
-40006af1: 31 d6 xor %edx,%esi
-40006af3: 31 c8 xor %ecx,%eax
-40006af5: 09 f0 or %esi,%eax
-40006af7: 85 c0 test %eax,%eax
-40006af9: 75 16 jne 40006b11 <dir_seek+0x13b>
-40006afb: 8b 45 08 mov 0x8(%ebp),%eax
-40006afe: 8b 40 08 mov 0x8(%eax),%eax
-40006b01: 89 c2 mov %eax,%edx
-40006b03: 81 ca 00 00 01 00 or $0x10000,%edx
-40006b09: 8b 45 08 mov 0x8(%ebp),%eax
-40006b0c: 89 50 08 mov %edx,0x8(%eax)
-40006b0f: eb 14 jmp 40006b25 <dir_seek+0x14f>
-40006b11: 8b 45 08 mov 0x8(%ebp),%eax
-40006b14: 8b 40 08 mov 0x8(%eax),%eax
-40006b17: 89 c2 mov %eax,%edx
-40006b19: 81 e2 ff ff fe ff and $0xfffeffff,%edx
-40006b1f: 8b 45 08 mov 0x8(%ebp),%eax
-40006b22: 89 50 08 mov %edx,0x8(%eax)
-40006b25: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
-40006b2c: 8b 45 dc mov -0x24(%ebp),%eax
-40006b2f: 83 c4 34 add $0x34,%esp
-40006b32: 5b pop %ebx
-40006b33: 5e pop %esi
-40006b34: 5f pop %edi
-40006b35: c9 leave
-40006b36: c3 ret
-40006b37: 90 nop
-
-40006b38 <add_intr_handler>:
-/*
- * Copyright (c) 2007 Kevin Wolf
- *
- * This program is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
-40006b38: 55 push %ebp
-40006b39: 89 e5 mov %esp,%ebp
- * and/or modify it under the terms of the Do What The Fuck You Want
-40006b3b: 8b 45 08 mov 0x8(%ebp),%eax
-40006b3e: 50 push %eax
-40006b3f: b8 34 00 00 00 mov $0x34,%eax
-40006b44: cd 30 int $0x30
-40006b46: 83 c4 04 add $0x4,%esp
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
- */
-
-#ifndef _CDI_IO_H_
-#define _CDI_IO_H_
-40006b49: c9 leave
-40006b4a: c3 ret
-40006b4b: 90 nop
-
-40006b4c <get_tick_count>:
- return result;
-}
-
-
-/**
- * Neuen Prozess erstellen. Dieser ist solange blockiert, bis er mit
-40006b4c: 55 push %ebp
-40006b4d: 89 e5 mov %esp,%ebp
-40006b4f: 57 push %edi
-40006b50: 56 push %esi
-40006b51: 53 push %ebx
-40006b52: 83 ec 10 sub $0x10,%esp
- * unblock_task erloest wird. Waerend dieser Zeit kann der Elternprozess Mit
- * Hilfe von init_child_page Einzelne Seiten in den Adressraum des neuen
-40006b55: b8 28 00 00 00 mov $0x28,%eax
-40006b5a: cd 30 int $0x30
-40006b5c: 89 45 ec mov %eax,-0x14(%ebp)
-40006b5f: 89 55 f0 mov %edx,-0x10(%ebp)
- * Prozesses mappen.
- *
- * @param initial_eip Der Einsprungspunkt an dem der Prozess seine Arbeit
- * beginnen soll.
- * @param uid Die Benutzernummer unter der der Neue Prozess laufen soll (FIXME:
- * Sollte vom Elternprozess geerbt werden)
-40006b62: 8b 75 ec mov -0x14(%ebp),%esi
-40006b65: bf 00 00 00 00 mov $0x0,%edi
-40006b6a: 8b 45 f0 mov -0x10(%ebp),%eax
-40006b6d: ba 00 00 00 00 mov $0x0,%edx
-40006b72: 89 c1 mov %eax,%ecx
-40006b74: 89 d3 mov %edx,%ebx
-40006b76: 89 cb mov %ecx,%ebx
-40006b78: b9 00 00 00 00 mov $0x0,%ecx
-40006b7d: 89 f0 mov %esi,%eax
-40006b7f: 09 c8 or %ecx,%eax
-40006b81: 89 fa mov %edi,%edx
-40006b83: 09 da or %ebx,%edx
- * @param args Pointer auf die Kommandozeilen-Parameter
-40006b85: 83 c4 10 add $0x10,%esp
-40006b88: 5b pop %ebx
-40006b89: 5e pop %esi
-40006b8a: 5f pop %edi
-40006b8b: c9 leave
-40006b8c: c3 ret
-40006b8d: 90 nop
-40006b8e: 90 nop
-40006b8f: 90 nop
-
-40006b90 <syscall_putsn>:
-/*
- * Copyright (c) 2007 The tyndur Project. All rights reserved.
- *
-40006b90: 55 push %ebp
-40006b91: 89 e5 mov %esp,%ebp
- * This code is derived from software contributed to the tyndur Project
- * by Antoine Kaufmann.
-40006b93: 8b 55 08 mov 0x8(%ebp),%edx
-40006b96: 8b 45 0c mov 0xc(%ebp),%eax
-40006b99: 50 push %eax
-40006b9a: 52 push %edx
-40006b9b: b8 00 00 00 00 mov $0x0,%eax
-40006ba0: cd 30 int $0x30
-40006ba2: 83 c4 08 add $0x8,%esp
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
-40006ba5: b8 01 00 00 00 mov $0x1,%eax
- * notice, this list of conditions and the following disclaimer in the
-40006baa: c9 leave
-40006bab: c3 ret
-
-40006bac <create_shared_memory>:
-/*
- * Copyright (c) 2007 Kevin Wolf
- *
- * This program is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
-40006bac: 55 push %ebp
-40006bad: 89 e5 mov %esp,%ebp
-40006baf: 83 ec 10 sub $0x10,%esp
- * and/or modify it under the terms of the Do What The Fuck You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
-40006bb2: 8b 45 08 mov 0x8(%ebp),%eax
-40006bb5: 50 push %eax
-40006bb6: b8 3f 00 00 00 mov $0x3f,%eax
-40006bbb: cd 30 int $0x30
-40006bbd: 83 c4 08 add $0x8,%esp
-40006bc0: 89 45 fc mov %eax,-0x4(%ebp)
-
-#ifndef _CDI_IO_H_
-#define _CDI_IO_H_
-
-#include <stdint.h>
-
-40006bc3: 8b 45 fc mov -0x4(%ebp),%eax
-static inline uint16_t cdi_inw(uint16_t _port)
-40006bc6: c9 leave
-40006bc7: c3 ret
-
-40006bc8 <open_shared_memory>:
-{
- uint16_t result;
-40006bc8: 55 push %ebp
-40006bc9: 89 e5 mov %esp,%ebp
-40006bcb: 83 ec 10 sub $0x10,%esp
- __asm__ ("inw %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-40006bce: 8b 45 08 mov 0x8(%ebp),%eax
-40006bd1: 50 push %eax
-40006bd2: b8 40 00 00 00 mov $0x40,%eax
-40006bd7: cd 30 int $0x30
-40006bd9: 83 c4 04 add $0x4,%esp
-40006bdc: 89 45 fc mov %eax,-0x4(%ebp)
-static inline uint8_t cdi_inb(uint16_t _port)
-{
- uint8_t result;
- __asm__ ("inb %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-40006bdf: 8b 45 fc mov -0x4(%ebp),%eax
-
-40006be2: c9 leave
-40006be3: c3 ret
-
-40006be4 <close_shared_memory>:
-static inline uint32_t cdi_inl(uint16_t _port)
-{
-40006be4: 55 push %ebp
-40006be5: 89 e5 mov %esp,%ebp
- uint32_t result;
-40006be7: 8b 45 08 mov 0x8(%ebp),%eax
-40006bea: 50 push %eax
-40006beb: b8 41 00 00 00 mov $0x41,%eax
-40006bf0: cd 30 int $0x30
-40006bf2: 83 c4 04 add $0x4,%esp
- __asm__ ("inl %1, %0" : "=a" (result) : "Nd" (_port));
- return result;
-}
-
-
-
-40006bf5: c9 leave
-40006bf6: c3 ret
-40006bf7: 90 nop
-
-40006bf8 <lostio_sync_dispatch>:
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
-40006bf8: 55 push %ebp
-40006bf9: 89 e5 mov %esp,%ebp
-40006bfb: 57 push %edi
-40006bfc: 56 push %esi
-40006bfd: 53 push %ebx
-40006bfe: 83 ec 2c sub $0x2c,%esp
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-40006c01: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-40006c08: a1 0c a6 00 40 mov 0x4000a60c,%eax
-40006c0d: 85 c0 test %eax,%eax
-40006c0f: 0f 84 b6 00 00 00 je 40006ccb <lostio_sync_dispatch+0xd3>
- .buffer = buffer,
-
- .error = 0
- };
-40006c15: e9 90 00 00 00 jmp 40006caa <lostio_sync_dispatch+0xb2>
-
- // Request starten
-40006c1a: 8b 45 ec mov -0x14(%ebp),%eax
-40006c1d: 8b 00 mov (%eax),%eax
-40006c1f: 8b 40 1c mov 0x1c(%eax),%eax
-40006c22: 8b 48 08 mov 0x8(%eax),%ecx
-40006c25: 8b 58 0c mov 0xc(%eax),%ebx
-40006c28: 8b 45 ec mov -0x14(%ebp),%eax
-40006c2b: 8b 00 mov (%eax),%eax
-40006c2d: 8b 50 14 mov 0x14(%eax),%edx
-40006c30: 8b 40 10 mov 0x10(%eax),%eax
-40006c33: 89 ce mov %ecx,%esi
-40006c35: 89 df mov %ebx,%edi
-40006c37: 29 c6 sub %eax,%esi
-40006c39: 19 d7 sbb %edx,%edi
-40006c3b: 89 75 d0 mov %esi,-0x30(%ebp)
-40006c3e: 89 7d d4 mov %edi,-0x2c(%ebp)
-40006c41: 8b 45 ec mov -0x14(%ebp),%eax
-40006c44: 8b 50 08 mov 0x8(%eax),%edx
-40006c47: 8b 45 ec mov -0x14(%ebp),%eax
-40006c4a: 8b 40 0c mov 0xc(%eax),%eax
-40006c4d: 0f af c2 imul %edx,%eax
-40006c50: 89 45 d8 mov %eax,-0x28(%ebp)
-40006c53: c7 45 dc 00 00 00 00 movl $0x0,-0x24(%ebp)
-40006c5a: 8b 7d dc mov -0x24(%ebp),%edi
-40006c5d: 39 7d d4 cmp %edi,-0x2c(%ebp)
-40006c60: 72 45 jb 40006ca7 <lostio_sync_dispatch+0xaf>
-40006c62: 8b 45 dc mov -0x24(%ebp),%eax
-40006c65: 39 45 d4 cmp %eax,-0x2c(%ebp)
-40006c68: 77 08 ja 40006c72 <lostio_sync_dispatch+0x7a>
-40006c6a: 8b 75 d8 mov -0x28(%ebp),%esi
-40006c6d: 39 75 d0 cmp %esi,-0x30(%ebp)
-40006c70: 72 35 jb 40006ca7 <lostio_sync_dispatch+0xaf>
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40006c72: 8b 55 ec mov -0x14(%ebp),%edx
-40006c75: 83 c2 04 add $0x4,%edx
-40006c78: 8b 45 ec mov -0x14(%ebp),%eax
-40006c7b: 8b 48 14 mov 0x14(%eax),%ecx
-40006c7e: 8b 45 ec mov -0x14(%ebp),%eax
-40006c81: 8b 40 18 mov 0x18(%eax),%eax
-40006c84: 52 push %edx
-40006c85: 6a 10 push $0x10
-40006c87: 51 push %ecx
-40006c88: 50 push %eax
-40006c89: e8 44 03 00 00 call 40006fd2 <rpc_io_read>
-40006c8e: 83 c4 10 add $0x10,%esp
- }
-
- // Ein ATA-Geraet
-40006c91: a1 0c a6 00 40 mov 0x4000a60c,%eax
-40006c96: 83 ec 08 sub $0x8,%esp
-40006c99: ff 75 e8 pushl -0x18(%ebp)
-40006c9c: 50 push %eax
-40006c9d: e8 d7 12 00 00 call 40007f79 <list_remove>
-40006ca2: 83 c4 10 add $0x10,%esp
-40006ca5: eb 03 jmp 40006caa <lostio_sync_dispatch+0xb2>
- dev->atapi = 0;
-
-40006ca7: ff 45 e8 incl -0x18(%ebp)
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-40006caa: a1 0c a6 00 40 mov 0x4000a60c,%eax
-40006caf: 83 ec 08 sub $0x8,%esp
-40006cb2: ff 75 e8 pushl -0x18(%ebp)
-40006cb5: 50 push %eax
-40006cb6: e8 d2 11 00 00 call 40007e8d <list_get_element_at>
-40006cbb: 83 c4 10 add $0x10,%esp
-40006cbe: 89 45 ec mov %eax,-0x14(%ebp)
-40006cc1: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-40006cc5: 0f 85 4f ff ff ff jne 40006c1a <lostio_sync_dispatch+0x22>
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
- return 1;
-40006ccb: 8d 65 f4 lea -0xc(%ebp),%esp
-40006cce: 5b pop %ebx
-40006ccf: 5e pop %esi
-40006cd0: 5f pop %edi
-40006cd1: c9 leave
-40006cd2: c3 ret
-
-40006cd3 <lostio_sync_read_wait>:
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-40006cd3: 55 push %ebp
-40006cd4: 89 e5 mov %esp,%ebp
-40006cd6: 83 ec 18 sub $0x18,%esp
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-40006cd9: 83 ec 0c sub $0xc,%esp
-40006cdc: 6a 1c push $0x1c
-40006cde: e8 f5 15 00 00 call 400082d8 <malloc>
-40006ce3: 83 c4 10 add $0x10,%esp
-40006ce6: 89 45 fc mov %eax,-0x4(%ebp)
- void* buffer)
-{
-40006ce9: a1 0c a6 00 40 mov 0x4000a60c,%eax
-40006cee: 85 c0 test %eax,%eax
-40006cf0: 75 0a jne 40006cfc <lostio_sync_read_wait+0x29>
- int result = 1;
-40006cf2: e8 29 0f 00 00 call 40007c20 <list_create>
-40006cf7: a3 0c a6 00 40 mov %eax,0x4000a60c
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-40006cfc: 8b 55 fc mov -0x4(%ebp),%edx
-40006cff: 8b 45 0c mov 0xc(%ebp),%eax
-40006d02: 89 42 18 mov %eax,0x18(%edx)
- uint16_t current_count;
-40006d05: 8b 55 fc mov -0x4(%ebp),%edx
-40006d08: 8b 45 10 mov 0x10(%ebp),%eax
-40006d0b: 89 42 14 mov %eax,0x14(%edx)
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-40006d0e: 8b 45 fc mov -0x4(%ebp),%eax
-40006d11: 83 c0 04 add $0x4,%eax
-40006d14: 83 ec 04 sub $0x4,%esp
-40006d17: 6a 10 push $0x10
-40006d19: ff 75 14 pushl 0x14(%ebp)
-40006d1c: 50 push %eax
-40006d1d: e8 46 22 00 00 call 40008f68 <memcpy>
-40006d22: 83 c4 10 add $0x10,%esp
- size_t count_left = count;
-
-40006d25: 8b 55 fc mov -0x4(%ebp),%edx
-40006d28: 8b 45 08 mov 0x8(%ebp),%eax
-40006d2b: 89 02 mov %eax,(%edx)
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40006d2d: a1 0c a6 00 40 mov 0x4000a60c,%eax
-40006d32: 83 ec 08 sub $0x8,%esp
-40006d35: ff 75 fc pushl -0x4(%ebp)
-40006d38: 50 push %eax
-40006d39: e8 8e 0f 00 00 call 40007ccc <list_push>
-40006d3e: 83 c4 10 add $0x10,%esp
-40006d41: a3 0c a6 00 40 mov %eax,0x4000a60c
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40006d46: c9 leave
-40006d47: c3 ret
-
-40006d48 <syscall_timer>:
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-40006d48: 55 push %ebp
-40006d49: 89 e5 mov %esp,%ebp
-#include "cdi/misc.h"
-40006d4b: b8 46 00 00 00 mov $0x46,%eax
-40006d50: ff 75 0c pushl 0xc(%ebp)
-40006d53: ff 75 08 pushl 0x8(%ebp)
-40006d56: cd 30 int $0x30
-40006d58: 83 c4 08 add $0x8,%esp
-
-#include "device.h"
-
-
-/**
- * ATA-Geraet identifizieren
-40006d5b: c9 leave
-40006d5c: c3 ret
-40006d5d: 90 nop
-40006d5e: 90 nop
-40006d5f: 90 nop
-
-40006d60 <rpc_io_open>:
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-40006d60: 55 push %ebp
-40006d61: 89 e5 mov %esp,%ebp
-40006d63: 53 push %ebx
-40006d64: 83 ec 74 sub $0x74,%esp
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
-40006d67: 83 ec 04 sub $0x4,%esp
-40006d6a: 6a 25 push $0x25
-40006d6c: 6a 00 push $0x0
-40006d6e: 8d 45 b3 lea -0x4d(%ebp),%eax
-40006d71: 50 push %eax
-40006d72: e8 9d 23 00 00 call 40009114 <memset>
-40006d77: 83 c4 10 add $0x10,%esp
- .buffer = buffer,
-
- .error = 0
- };
-40006d7a: 8b 45 14 mov 0x14(%ebp),%eax
-40006d7d: 83 c0 05 add $0x5,%eax
-40006d80: 89 45 dc mov %eax,-0x24(%ebp)
-
- // Request starten
-40006d83: 8b 45 14 mov 0x14(%ebp),%eax
-40006d86: 89 45 e0 mov %eax,-0x20(%ebp)
- if (!ata_request(&request)) {
-40006d89: 8b 45 14 mov 0x14(%ebp),%eax
-40006d8c: 40 inc %eax
-40006d8d: 89 45 e4 mov %eax,-0x1c(%ebp)
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40006d90: 8b 45 14 mov 0x14(%ebp),%eax
-40006d93: 83 c0 2a add $0x2a,%eax
-40006d96: 89 45 e8 mov %eax,-0x18(%ebp)
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40006d99: e8 92 af ff ff call 40001d30 <get_pid>
-40006d9e: 89 45 b7 mov %eax,-0x49(%ebp)
- }
-
-40006da1: 8b 45 e4 mov -0x1c(%ebp),%eax
-40006da4: 8b 10 mov (%eax),%edx
-40006da6: 8b 45 e0 mov -0x20(%ebp),%eax
-40006da9: 8a 00 mov (%eax),%al
-40006dab: 0f b6 c0 movzbl %al,%eax
-40006dae: ff 75 dc pushl -0x24(%ebp)
-40006db1: 52 push %edx
-40006db2: 50 push %eax
-40006db3: ff 75 e8 pushl -0x18(%ebp)
-40006db6: e8 66 08 00 00 call 40007621 <lostio_open>
-40006dbb: 83 c4 10 add $0x10,%esp
-40006dbe: 89 45 ec mov %eax,-0x14(%ebp)
- // Ein ATA-Geraet
- dev->atapi = 0;
-40006dc1: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-40006dc5: 75 20 jne 40006de7 <rpc_io_open+0x87>
-
- // TODO: Informationen verarbeiten
-40006dc7: c7 45 b7 00 00 00 00 movl $0x0,-0x49(%ebp)
-
-40006dce: 8d 45 b3 lea -0x4d(%ebp),%eax
-40006dd1: 50 push %eax
-40006dd2: 6a 25 push $0x25
-40006dd4: ff 75 0c pushl 0xc(%ebp)
-40006dd7: ff 75 08 pushl 0x8(%ebp)
-40006dda: e8 70 c8 ff ff call 4000364f <rpc_send_response>
-40006ddf: 83 c4 10 add $0x10,%esp
-40006de2: e9 97 01 00 00 jmp 40006f7e <rpc_io_open+0x21e>
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-40006de7: 8b 45 ec mov -0x14(%ebp),%eax
-40006dea: 8b 40 1c mov 0x1c(%eax),%eax
-40006ded: 8b 40 1c mov 0x1c(%eax),%eax
-40006df0: 25 00 00 04 00 and $0x40000,%eax
-40006df5: 85 c0 test %eax,%eax
-40006df7: 0f 84 45 01 00 00 je 40006f42 <rpc_io_open+0x1e2>
-40006dfd: 8b 45 e0 mov -0x20(%ebp),%eax
-40006e00: 8a 00 mov (%eax),%al
-40006e02: 0f b6 c0 movzbl %al,%eax
-40006e05: 83 e0 40 and $0x40,%eax
-40006e08: 85 c0 test %eax,%eax
-40006e0a: 0f 85 32 01 00 00 jne 40006f42 <rpc_io_open+0x1e2>
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-40006e10: c7 45 ac 00 00 00 00 movl $0x0,-0x54(%ebp)
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40006e17: 8b 45 ec mov -0x14(%ebp),%eax
-40006e1a: 8b 40 1c mov 0x1c(%eax),%eax
-40006e1d: 8a 00 mov (%eax),%al
-40006e1f: 0f b6 c0 movzbl %al,%eax
-40006e22: 83 ec 0c sub $0xc,%esp
-40006e25: 50 push %eax
-40006e26: e8 74 cb ff ff call 4000399f <get_typehandle>
-40006e2b: 83 c4 10 add $0x10,%esp
-40006e2e: 89 45 f0 mov %eax,-0x10(%ebp)
-{
-40006e31: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40006e35: 74 0a je 40006e41 <rpc_io_open+0xe1>
-40006e37: 8b 45 f0 mov -0x10(%ebp),%eax
-40006e3a: 8b 40 10 mov 0x10(%eax),%eax
-40006e3d: 85 c0 test %eax,%eax
-40006e3f: 75 0c jne 40006e4d <rpc_io_open+0xed>
- int result = 1;
-40006e41: c7 45 b3 00 00 00 00 movl $0x0,-0x4d(%ebp)
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-40006e48: e9 0f 01 00 00 jmp 40006f5c <rpc_io_open+0x1fc>
- int result = 1;
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-40006e4d: 8b 45 f0 mov -0x10(%ebp),%eax
-40006e50: 8b 50 10 mov 0x10(%eax),%edx
-40006e53: 8d 45 a8 lea -0x58(%ebp),%eax
-40006e56: 68 00 04 00 00 push $0x400
-40006e5b: 6a 01 push $0x1
-40006e5d: ff 75 ec pushl -0x14(%ebp)
-40006e60: 50 push %eax
-40006e61: ff d2 call *%edx
-40006e63: 83 c4 0c add $0xc,%esp
- uint16_t current_count;
- void* current_buffer = buffer;
-40006e66: 8b 45 ac mov -0x54(%ebp),%eax
-40006e69: 85 c0 test %eax,%eax
-40006e6b: 0f 84 eb 00 00 00 je 40006f5c <rpc_io_open+0x1fc>
-40006e71: 89 e0 mov %esp,%eax
-40006e73: 89 45 98 mov %eax,-0x68(%ebp)
- uint64_t lba = start;
-40006e76: 8b 45 a8 mov -0x58(%ebp),%eax
-40006e79: 89 45 f4 mov %eax,-0xc(%ebp)
-
-40006e7c: 83 ec 0c sub $0xc,%esp
-40006e7f: ff 75 f4 pushl -0xc(%ebp)
-40006e82: e8 ed 23 00 00 call 40009274 <strlen>
-40006e87: 83 c4 10 add $0x10,%esp
-40006e8a: 83 c0 02 add $0x2,%eax
-40006e8d: 83 c0 0f add $0xf,%eax
-40006e90: 83 c0 0f add $0xf,%eax
-40006e93: c1 e8 04 shr $0x4,%eax
-40006e96: c1 e0 04 shl $0x4,%eax
-40006e99: 29 c4 sub %eax,%esp
-40006e9b: 89 65 94 mov %esp,-0x6c(%ebp)
-40006e9e: 8b 45 94 mov -0x6c(%ebp),%eax
-40006ea1: 83 c0 0f add $0xf,%eax
-40006ea4: c1 e8 04 shr $0x4,%eax
-40006ea7: c1 e0 04 shl $0x4,%eax
-40006eaa: 89 45 94 mov %eax,-0x6c(%ebp)
-40006ead: 8b 45 94 mov -0x6c(%ebp),%eax
-40006eb0: 89 45 d8 mov %eax,-0x28(%ebp)
- // Anzahl der Sektoren die noch uebrig sind
-40006eb3: 8b 45 e0 mov -0x20(%ebp),%eax
-40006eb6: 8a 00 mov (%eax),%al
-40006eb8: 88 c2 mov %al,%dl
-40006eba: 8b 45 d8 mov -0x28(%ebp),%eax
-40006ebd: 88 10 mov %dl,(%eax)
- size_t count_left = count;
-40006ebf: 83 ec 0c sub $0xc,%esp
-40006ec2: ff 75 f4 pushl -0xc(%ebp)
-40006ec5: e8 aa 23 00 00 call 40009274 <strlen>
-40006eca: 83 c4 10 add $0x10,%esp
-40006ecd: 8d 50 01 lea 0x1(%eax),%edx
-40006ed0: 8b 45 d8 mov -0x28(%ebp),%eax
-40006ed3: 40 inc %eax
-40006ed4: 83 ec 04 sub $0x4,%esp
-40006ed7: 52 push %edx
-40006ed8: ff 75 f4 pushl -0xc(%ebp)
-40006edb: 50 push %eax
-40006edc: e8 87 20 00 00 call 40008f68 <memcpy>
-40006ee1: 83 c4 10 add $0x10,%esp
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40006ee4: 8b 5d d8 mov -0x28(%ebp),%ebx
-40006ee7: 83 ec 0c sub $0xc,%esp
-40006eea: ff 75 f4 pushl -0xc(%ebp)
-40006eed: e8 82 23 00 00 call 40009274 <strlen>
-40006ef2: 83 c4 10 add $0x10,%esp
-40006ef5: 83 c0 02 add $0x2,%eax
-40006ef8: 53 push %ebx
-40006ef9: 50 push %eax
-40006efa: 68 0e 9c 00 40 push $0x40009c0e
-40006eff: 6a 01 push $0x1
-40006f01: e8 27 c7 ff ff call 4000362d <rpc_get_response>
-40006f06: 83 c4 10 add $0x10,%esp
-40006f09: 89 45 f8 mov %eax,-0x8(%ebp)
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40006f0c: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40006f10: 74 0a je 40006f1c <rpc_io_open+0x1bc>
-40006f12: 8b 45 f8 mov -0x8(%ebp),%eax
-40006f15: 8b 40 0c mov 0xc(%eax),%eax
-40006f18: 85 c0 test %eax,%eax
-40006f1a: 75 09 jne 40006f25 <rpc_io_open+0x1c5>
- if (count_left > 256) {
-40006f1c: c7 45 b3 00 00 00 00 movl $0x0,-0x4d(%ebp)
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40006f23: eb 18 jmp 40006f3d <rpc_io_open+0x1dd>
- if (count_left > 256) {
- current_count = 256;
- } else {
-40006f25: 8b 45 f8 mov -0x8(%ebp),%eax
-40006f28: 8b 40 0c mov 0xc(%eax),%eax
-40006f2b: 83 ec 04 sub $0x4,%esp
-40006f2e: 6a 25 push $0x25
-40006f30: 50 push %eax
-40006f31: 8d 45 b3 lea -0x4d(%ebp),%eax
-40006f34: 50 push %eax
-40006f35: e8 2e 20 00 00 call 40008f68 <memcpy>
-40006f3a: 83 c4 10 add $0x10,%esp
-40006f3d: 8b 65 98 mov -0x68(%ebp),%esp
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
-40006f40: eb 1a jmp 40006f5c <rpc_io_open+0x1fc>
- } else {
- current_count = count_left;
- }
-
- // Request vorbereiten
- request.dev = dev;
-40006f42: 8b 45 ec mov -0x14(%ebp),%eax
-40006f45: 8b 00 mov (%eax),%eax
-40006f47: 89 45 b3 mov %eax,-0x4d(%ebp)
- // TODO: DMA, UltraDMA...
-40006f4a: 8b 45 ec mov -0x14(%ebp),%eax
-40006f4d: 8b 40 1c mov 0x1c(%eax),%eax
-40006f50: 8b 50 18 mov 0x18(%eax),%edx
-40006f53: 8b 40 14 mov 0x14(%eax),%eax
-40006f56: 89 45 bb mov %eax,-0x45(%ebp)
-40006f59: 89 55 bf mov %edx,-0x41(%ebp)
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
-40006f5c: 8b 45 b3 mov -0x4d(%ebp),%eax
-40006f5f: 85 c0 test %eax,%eax
-40006f61: 75 07 jne 40006f6a <rpc_io_open+0x20a>
- request.flags.poll = 1;
- request.flags.ata = 0;
-40006f63: c7 45 b7 00 00 00 00 movl $0x0,-0x49(%ebp)
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
-40006f6a: 8d 45 b3 lea -0x4d(%ebp),%eax
-40006f6d: 50 push %eax
-40006f6e: 6a 25 push $0x25
-40006f70: ff 75 0c pushl 0xc(%ebp)
-40006f73: ff 75 08 pushl 0x8(%ebp)
-40006f76: e8 d4 c6 ff ff call 4000364f <rpc_send_response>
-40006f7b: 83 c4 10 add $0x10,%esp
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
-40006f7e: 8b 5d fc mov -0x4(%ebp),%ebx
-40006f81: c9 leave
-40006f82: c3 ret
-
-40006f83 <rpc_io_close>:
- request.registers.ata.lba = lba;
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
- request.buffer = current_buffer;
-40006f83: 55 push %ebp
-40006f84: 89 e5 mov %esp,%ebp
-40006f86: 83 ec 18 sub $0x18,%esp
-
-40006f89: 8b 45 14 mov 0x14(%ebp),%eax
-40006f8c: 89 45 fc mov %eax,-0x4(%ebp)
- request.error = NO_ERROR;
-
- // TODO: LBA48
-40006f8f: 8b 45 fc mov -0x4(%ebp),%eax
-40006f92: 8b 00 mov (%eax),%eax
-40006f94: 83 ec 08 sub $0x8,%esp
-40006f97: 50 push %eax
-40006f98: ff 75 08 pushl 0x8(%ebp)
-40006f9b: e8 89 09 00 00 call 40007929 <lostio_close>
-40006fa0: 83 c4 10 add $0x10,%esp
-40006fa3: 83 f8 01 cmp $0x1,%eax
-40006fa6: 75 15 jne 40006fbd <rpc_io_close+0x3a>
- // TODO: CHS
-
-40006fa8: 83 ec 04 sub $0x4,%esp
-40006fab: 6a 00 push $0x0
-40006fad: ff 75 0c pushl 0xc(%ebp)
-40006fb0: ff 75 08 pushl 0x8(%ebp)
-40006fb3: e8 bb c6 ff ff call 40003673 <rpc_send_dword_response>
-40006fb8: 83 c4 10 add $0x10,%esp
-40006fbb: eb 13 jmp 40006fd0 <rpc_io_close+0x4d>
- // Request ausfuehren
- if (!ata_request(&request)) {
- result = 0;
- break;
-40006fbd: 83 ec 04 sub $0x4,%esp
-40006fc0: 6a ff push $0xffffffff
-40006fc2: ff 75 0c pushl 0xc(%ebp)
-40006fc5: ff 75 08 pushl 0x8(%ebp)
-40006fc8: e8 a6 c6 ff ff call 40003673 <rpc_send_dword_response>
-40006fcd: 83 c4 10 add $0x10,%esp
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
-40006fd0: c9 leave
-40006fd1: c3 ret
-
-40006fd2 <rpc_io_read>:
- count_left -= current_count;
- lba += current_count;
- }
-
- return result;
-}
-40006fd2: 55 push %ebp
-40006fd3: 89 e5 mov %esp,%ebp
-40006fd5: 53 push %ebx
-40006fd6: 83 ec 24 sub $0x24,%esp
-
-40006fd9: 8b 45 14 mov 0x14(%ebp),%eax
-40006fdc: 89 45 ec mov %eax,-0x14(%ebp)
-40006fdf: 8b 45 ec mov -0x14(%ebp),%eax
-40006fe2: 8b 00 mov (%eax),%eax
-40006fe4: 83 ec 08 sub $0x8,%esp
-40006fe7: 50 push %eax
-40006fe8: ff 75 08 pushl 0x8(%ebp)
-40006feb: e8 4f ca ff ff call 40003a3f <get_filehandle>
-40006ff0: 83 c4 10 add $0x10,%esp
-40006ff3: 89 45 f0 mov %eax,-0x10(%ebp)
-40006ff6: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40006ffa: 75 28 jne 40007024 <rpc_io_read+0x52>
-40006ffc: 83 ec 0c sub $0xc,%esp
-40006fff: 68 17 9c 00 40 push $0x40009c17
-40007004: e8 2a f5 ff ff call 40006533 <puts>
-40007009: 83 c4 10 add $0x10,%esp
-4000700c: 83 ec 04 sub $0x4,%esp
-4000700f: 6a 00 push $0x0
-40007011: ff 75 0c pushl 0xc(%ebp)
-40007014: ff 75 08 pushl 0x8(%ebp)
-40007017: e8 57 c6 ff ff call 40003673 <rpc_send_dword_response>
-4000701c: 83 c4 10 add $0x10,%esp
-4000701f: e9 08 01 00 00 jmp 4000712c <rpc_io_read+0x15a>
-40007024: 8b 45 f0 mov -0x10(%ebp),%eax
-40007027: 8b 40 1c mov 0x1c(%eax),%eax
-4000702a: 8a 00 mov (%eax),%al
-4000702c: 0f b6 c0 movzbl %al,%eax
-4000702f: 83 ec 0c sub $0xc,%esp
-40007032: 50 push %eax
-40007033: e8 67 c9 ff ff call 4000399f <get_typehandle>
-40007038: 83 c4 10 add $0x10,%esp
-4000703b: 89 45 f4 mov %eax,-0xc(%ebp)
-4000703e: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40007042: 0f 84 d1 00 00 00 je 40007119 <rpc_io_read+0x147>
-40007048: 8b 45 f4 mov -0xc(%ebp),%eax
-4000704b: 8b 40 10 mov 0x10(%eax),%eax
-4000704e: 85 c0 test %eax,%eax
-40007050: 0f 84 c3 00 00 00 je 40007119 <rpc_io_read+0x147>
-40007056: 8b 45 f4 mov -0xc(%ebp),%eax
-40007059: 8b 58 10 mov 0x10(%eax),%ebx
-4000705c: 8b 45 ec mov -0x14(%ebp),%eax
-4000705f: 8b 50 08 mov 0x8(%eax),%edx
-40007062: 8b 45 ec mov -0x14(%ebp),%eax
-40007065: 8b 40 04 mov 0x4(%eax),%eax
-40007068: 8d 4d e4 lea -0x1c(%ebp),%ecx
-4000706b: 52 push %edx
-4000706c: 50 push %eax
-4000706d: ff 75 f0 pushl -0x10(%ebp)
-40007070: 51 push %ecx
-40007071: ff d3 call *%ebx
-40007073: 83 c4 0c add $0xc,%esp
-40007076: 8b 45 ec mov -0x14(%ebp),%eax
-40007079: 8b 40 0c mov 0xc(%eax),%eax
-4000707c: 85 c0 test %eax,%eax
-4000707e: 75 1b jne 4000709b <rpc_io_read+0xc9>
-40007080: 8b 45 e4 mov -0x1c(%ebp),%eax
-40007083: 8b 55 e8 mov -0x18(%ebp),%edx
-40007086: 50 push %eax
-40007087: 52 push %edx
-40007088: ff 75 0c pushl 0xc(%ebp)
-4000708b: ff 75 08 pushl 0x8(%ebp)
-4000708e: e8 bc c5 ff ff call 4000364f <rpc_send_response>
-40007093: 83 c4 10 add $0x10,%esp
-40007096: e9 91 00 00 00 jmp 4000712c <rpc_io_read+0x15a>
-4000709b: 8b 45 ec mov -0x14(%ebp),%eax
-4000709e: 8b 40 0c mov 0xc(%eax),%eax
-400070a1: 83 ec 0c sub $0xc,%esp
-400070a4: 50 push %eax
-400070a5: e8 1e fb ff ff call 40006bc8 <open_shared_memory>
-400070aa: 83 c4 10 add $0x10,%esp
-400070ad: 89 45 f8 mov %eax,-0x8(%ebp)
-400070b0: 8b 4d e8 mov -0x18(%ebp),%ecx
-400070b3: 8b 45 ec mov -0x14(%ebp),%eax
-400070b6: 8b 50 04 mov 0x4(%eax),%edx
-400070b9: 8b 45 ec mov -0x14(%ebp),%eax
-400070bc: 8b 40 08 mov 0x8(%eax),%eax
-400070bf: 0f af c2 imul %edx,%eax
-400070c2: 39 c1 cmp %eax,%ecx
-400070c4: 76 12 jbe 400070d8 <rpc_io_read+0x106>
-400070c6: 8b 45 ec mov -0x14(%ebp),%eax
-400070c9: 8b 50 04 mov 0x4(%eax),%edx
-400070cc: 8b 45 ec mov -0x14(%ebp),%eax
-400070cf: 8b 40 08 mov 0x8(%eax),%eax
-400070d2: 0f af c2 imul %edx,%eax
-400070d5: 89 45 e8 mov %eax,-0x18(%ebp)
-400070d8: 8b 45 e8 mov -0x18(%ebp),%eax
-400070db: 8b 55 e4 mov -0x1c(%ebp),%edx
-400070de: 83 ec 04 sub $0x4,%esp
-400070e1: 50 push %eax
-400070e2: 52 push %edx
-400070e3: ff 75 f8 pushl -0x8(%ebp)
-400070e6: e8 7d 1e 00 00 call 40008f68 <memcpy>
-400070eb: 83 c4 10 add $0x10,%esp
-400070ee: 8b 45 ec mov -0x14(%ebp),%eax
-400070f1: 8b 40 0c mov 0xc(%eax),%eax
-400070f4: 83 ec 0c sub $0xc,%esp
-400070f7: 50 push %eax
-400070f8: e8 e7 fa ff ff call 40006be4 <close_shared_memory>
-400070fd: 83 c4 10 add $0x10,%esp
-40007100: 8d 45 e4 lea -0x1c(%ebp),%eax
-40007103: 83 c0 04 add $0x4,%eax
-40007106: 50 push %eax
-40007107: 6a 04 push $0x4
-40007109: ff 75 0c pushl 0xc(%ebp)
-4000710c: ff 75 08 pushl 0x8(%ebp)
-4000710f: e8 3b c5 ff ff call 4000364f <rpc_send_response>
-40007114: 83 c4 10 add $0x10,%esp
-40007117: eb 13 jmp 4000712c <rpc_io_read+0x15a>
-40007119: 83 ec 04 sub $0x4,%esp
-4000711c: 6a 00 push $0x0
-4000711e: ff 75 0c pushl 0xc(%ebp)
-40007121: ff 75 08 pushl 0x8(%ebp)
-40007124: e8 4a c5 ff ff call 40003673 <rpc_send_dword_response>
-40007129: 83 c4 10 add $0x10,%esp
-4000712c: 8b 5d fc mov -0x4(%ebp),%ebx
-4000712f: c9 leave
-40007130: c3 ret
-
-40007131 <rpc_io_write>:
-40007131: 55 push %ebp
-40007132: 89 e5 mov %esp,%ebp
-40007134: 83 ec 28 sub $0x28,%esp
-40007137: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-4000713e: 8b 45 14 mov 0x14(%ebp),%eax
-40007141: 89 45 f0 mov %eax,-0x10(%ebp)
-40007144: 8b 45 f0 mov -0x10(%ebp),%eax
-40007147: 8b 00 mov (%eax),%eax
-40007149: 83 ec 08 sub $0x8,%esp
-4000714c: 50 push %eax
-4000714d: ff 75 08 pushl 0x8(%ebp)
-40007150: e8 ea c8 ff ff call 40003a3f <get_filehandle>
-40007155: 83 c4 10 add $0x10,%esp
-40007158: 89 45 f4 mov %eax,-0xc(%ebp)
-4000715b: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000715f: 74 1a je 4000717b <rpc_io_write+0x4a>
-40007161: 8b 45 f4 mov -0xc(%ebp),%eax
-40007164: 8b 40 1c mov 0x1c(%eax),%eax
-40007167: 8a 00 mov (%eax),%al
-40007169: 0f b6 c0 movzbl %al,%eax
-4000716c: 83 ec 0c sub $0xc,%esp
-4000716f: 50 push %eax
-40007170: e8 2a c8 ff ff call 4000399f <get_typehandle>
-40007175: 83 c4 10 add $0x10,%esp
-40007178: 89 45 ec mov %eax,-0x14(%ebp)
-4000717b: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-4000717f: 0f 84 d6 00 00 00 je 4000725b <rpc_io_write+0x12a>
-40007185: 8b 45 ec mov -0x14(%ebp),%eax
-40007188: 8b 40 14 mov 0x14(%eax),%eax
-4000718b: 85 c0 test %eax,%eax
-4000718d: 0f 84 c8 00 00 00 je 4000725b <rpc_io_write+0x12a>
-40007193: 8b 45 f0 mov -0x10(%ebp),%eax
-40007196: 8b 40 0c mov 0xc(%eax),%eax
-40007199: 85 c0 test %eax,%eax
-4000719b: 75 3a jne 400071d7 <rpc_io_write+0xa6>
-4000719d: 8b 45 f0 mov -0x10(%ebp),%eax
-400071a0: 83 c0 10 add $0x10,%eax
-400071a3: 89 45 f8 mov %eax,-0x8(%ebp)
-400071a6: 8b 45 f0 mov -0x10(%ebp),%eax
-400071a9: 8b 50 04 mov 0x4(%eax),%edx
-400071ac: 8b 45 f0 mov -0x10(%ebp),%eax
-400071af: 8b 40 08 mov 0x8(%eax),%eax
-400071b2: 0f af d0 imul %eax,%edx
-400071b5: 8b 45 10 mov 0x10(%ebp),%eax
-400071b8: 83 e8 10 sub $0x10,%eax
-400071bb: 39 c2 cmp %eax,%edx
-400071bd: 76 2d jbe 400071ec <rpc_io_write+0xbb>
-400071bf: 83 ec 04 sub $0x4,%esp
-400071c2: 6a ff push $0xffffffff
-400071c4: ff 75 0c pushl 0xc(%ebp)
-400071c7: ff 75 08 pushl 0x8(%ebp)
-400071ca: e8 a4 c4 ff ff call 40003673 <rpc_send_dword_response>
-400071cf: 83 c4 10 add $0x10,%esp
-400071d2: e9 97 00 00 00 jmp 4000726e <rpc_io_write+0x13d>
-400071d7: 8b 45 f0 mov -0x10(%ebp),%eax
-400071da: 8b 40 0c mov 0xc(%eax),%eax
-400071dd: 83 ec 0c sub $0xc,%esp
-400071e0: 50 push %eax
-400071e1: e8 e2 f9 ff ff call 40006bc8 <open_shared_memory>
-400071e6: 83 c4 10 add $0x10,%esp
-400071e9: 89 45 f8 mov %eax,-0x8(%ebp)
-400071ec: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400071f0: 75 15 jne 40007207 <rpc_io_write+0xd6>
-400071f2: 83 ec 04 sub $0x4,%esp
-400071f5: 6a ff push $0xffffffff
-400071f7: ff 75 0c pushl 0xc(%ebp)
-400071fa: ff 75 08 pushl 0x8(%ebp)
-400071fd: e8 71 c4 ff ff call 40003673 <rpc_send_dword_response>
-40007202: 83 c4 10 add $0x10,%esp
-40007205: eb 67 jmp 4000726e <rpc_io_write+0x13d>
-40007207: 8b 45 ec mov -0x14(%ebp),%eax
-4000720a: 8b 48 14 mov 0x14(%eax),%ecx
-4000720d: 8b 45 f0 mov -0x10(%ebp),%eax
-40007210: 8b 50 08 mov 0x8(%eax),%edx
-40007213: 8b 45 f0 mov -0x10(%ebp),%eax
-40007216: 8b 40 04 mov 0x4(%eax),%eax
-40007219: ff 75 f8 pushl -0x8(%ebp)
-4000721c: 52 push %edx
-4000721d: 50 push %eax
-4000721e: ff 75 f4 pushl -0xc(%ebp)
-40007221: ff d1 call *%ecx
-40007223: 83 c4 10 add $0x10,%esp
-40007226: 89 45 fc mov %eax,-0x4(%ebp)
-40007229: 8b 45 f0 mov -0x10(%ebp),%eax
-4000722c: 8b 40 0c mov 0xc(%eax),%eax
-4000722f: 85 c0 test %eax,%eax
-40007231: 74 12 je 40007245 <rpc_io_write+0x114>
-40007233: 8b 45 f0 mov -0x10(%ebp),%eax
-40007236: 8b 40 0c mov 0xc(%eax),%eax
-40007239: 83 ec 0c sub $0xc,%esp
-4000723c: 50 push %eax
-4000723d: e8 a2 f9 ff ff call 40006be4 <close_shared_memory>
-40007242: 83 c4 10 add $0x10,%esp
-40007245: 83 ec 04 sub $0x4,%esp
-40007248: ff 75 fc pushl -0x4(%ebp)
-4000724b: ff 75 0c pushl 0xc(%ebp)
-4000724e: ff 75 08 pushl 0x8(%ebp)
-40007251: e8 1d c4 ff ff call 40003673 <rpc_send_dword_response>
-40007256: 83 c4 10 add $0x10,%esp
-40007259: eb 13 jmp 4000726e <rpc_io_write+0x13d>
-4000725b: 83 ec 04 sub $0x4,%esp
-4000725e: 6a ff push $0xffffffff
-40007260: ff 75 0c pushl 0xc(%ebp)
-40007263: ff 75 08 pushl 0x8(%ebp)
-40007266: e8 08 c4 ff ff call 40003673 <rpc_send_dword_response>
-4000726b: 83 c4 10 add $0x10,%esp
-4000726e: c9 leave
-4000726f: c3 ret
-
-40007270 <rpc_io_seek>:
-40007270: 55 push %ebp
-40007271: 89 e5 mov %esp,%ebp
-40007273: 83 ec 18 sub $0x18,%esp
-40007276: 8b 45 14 mov 0x14(%ebp),%eax
-40007279: 89 45 f0 mov %eax,-0x10(%ebp)
-4000727c: 8b 45 f0 mov -0x10(%ebp),%eax
-4000727f: 8b 00 mov (%eax),%eax
-40007281: 83 ec 08 sub $0x8,%esp
-40007284: 50 push %eax
-40007285: ff 75 08 pushl 0x8(%ebp)
-40007288: e8 b2 c7 ff ff call 40003a3f <get_filehandle>
-4000728d: 83 c4 10 add $0x10,%esp
-40007290: 89 45 f4 mov %eax,-0xc(%ebp)
-40007293: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40007297: 75 15 jne 400072ae <rpc_io_seek+0x3e>
-40007299: 83 ec 04 sub $0x4,%esp
-4000729c: 6a ff push $0xffffffff
-4000729e: ff 75 0c pushl 0xc(%ebp)
-400072a1: ff 75 08 pushl 0x8(%ebp)
-400072a4: e8 ca c3 ff ff call 40003673 <rpc_send_dword_response>
-400072a9: 83 c4 10 add $0x10,%esp
-400072ac: eb 76 jmp 40007324 <rpc_io_seek+0xb4>
-400072ae: 8b 45 f4 mov -0xc(%ebp),%eax
-400072b1: 8b 40 1c mov 0x1c(%eax),%eax
-400072b4: 8a 00 mov (%eax),%al
-400072b6: 0f b6 c0 movzbl %al,%eax
-400072b9: 83 ec 0c sub $0xc,%esp
-400072bc: 50 push %eax
-400072bd: e8 dd c6 ff ff call 4000399f <get_typehandle>
-400072c2: 83 c4 10 add $0x10,%esp
-400072c5: 89 45 f8 mov %eax,-0x8(%ebp)
-400072c8: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400072cc: 74 43 je 40007311 <rpc_io_seek+0xa1>
-400072ce: 8b 45 f8 mov -0x8(%ebp),%eax
-400072d1: 8b 40 18 mov 0x18(%eax),%eax
-400072d4: 85 c0 test %eax,%eax
-400072d6: 74 39 je 40007311 <rpc_io_seek+0xa1>
-400072d8: 8b 45 f8 mov -0x8(%ebp),%eax
-400072db: 8b 48 18 mov 0x18(%eax),%ecx
-400072de: 8b 45 f0 mov -0x10(%ebp),%eax
-400072e1: 8b 50 08 mov 0x8(%eax),%edx
-400072e4: 8b 45 f0 mov -0x10(%ebp),%eax
-400072e7: 8b 40 04 mov 0x4(%eax),%eax
-400072ea: 83 ec 04 sub $0x4,%esp
-400072ed: 52 push %edx
-400072ee: 50 push %eax
-400072ef: ff 75 f4 pushl -0xc(%ebp)
-400072f2: ff d1 call *%ecx
-400072f4: 83 c4 10 add $0x10,%esp
-400072f7: 89 45 fc mov %eax,-0x4(%ebp)
-400072fa: 8b 45 fc mov -0x4(%ebp),%eax
-400072fd: 83 ec 04 sub $0x4,%esp
-40007300: 50 push %eax
-40007301: ff 75 0c pushl 0xc(%ebp)
-40007304: ff 75 08 pushl 0x8(%ebp)
-40007307: e8 67 c3 ff ff call 40003673 <rpc_send_dword_response>
-4000730c: 83 c4 10 add $0x10,%esp
-4000730f: eb 13 jmp 40007324 <rpc_io_seek+0xb4>
-40007311: 83 ec 04 sub $0x4,%esp
-40007314: 6a ff push $0xffffffff
-40007316: ff 75 0c pushl 0xc(%ebp)
-40007319: ff 75 08 pushl 0x8(%ebp)
-4000731c: e8 52 c3 ff ff call 40003673 <rpc_send_dword_response>
-40007321: 83 c4 10 add $0x10,%esp
-40007324: c9 leave
-40007325: c3 ret
-
-40007326 <rpc_io_eof>:
-40007326: 55 push %ebp
-40007327: 89 e5 mov %esp,%ebp
-40007329: 83 ec 18 sub $0x18,%esp
-4000732c: 8b 45 14 mov 0x14(%ebp),%eax
-4000732f: 89 45 f8 mov %eax,-0x8(%ebp)
-40007332: 8b 45 f8 mov -0x8(%ebp),%eax
-40007335: 8b 00 mov (%eax),%eax
-40007337: 83 ec 08 sub $0x8,%esp
-4000733a: 50 push %eax
-4000733b: ff 75 08 pushl 0x8(%ebp)
-4000733e: e8 fc c6 ff ff call 40003a3f <get_filehandle>
-40007343: 83 c4 10 add $0x10,%esp
-40007346: 89 45 fc mov %eax,-0x4(%ebp)
-40007349: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000734d: 74 24 je 40007373 <rpc_io_eof+0x4d>
-4000734f: 8b 45 fc mov -0x4(%ebp),%eax
-40007352: 8b 40 08 mov 0x8(%eax),%eax
-40007355: 25 00 00 01 00 and $0x10000,%eax
-4000735a: 85 c0 test %eax,%eax
-4000735c: 74 15 je 40007373 <rpc_io_eof+0x4d>
-4000735e: 83 ec 04 sub $0x4,%esp
-40007361: 6a ff push $0xffffffff
-40007363: ff 75 0c pushl 0xc(%ebp)
-40007366: ff 75 08 pushl 0x8(%ebp)
-40007369: e8 05 c3 ff ff call 40003673 <rpc_send_dword_response>
-4000736e: 83 c4 10 add $0x10,%esp
-40007371: eb 13 jmp 40007386 <rpc_io_eof+0x60>
-40007373: 83 ec 04 sub $0x4,%esp
-40007376: 6a 00 push $0x0
-40007378: ff 75 0c pushl 0xc(%ebp)
-4000737b: ff 75 08 pushl 0x8(%ebp)
-4000737e: e8 f0 c2 ff ff call 40003673 <rpc_send_dword_response>
-40007383: 83 c4 10 add $0x10,%esp
-40007386: c9 leave
-40007387: c3 ret
-
-40007388 <rpc_io_tell>:
-40007388: 55 push %ebp
-40007389: 89 e5 mov %esp,%ebp
-4000738b: 83 ec 18 sub $0x18,%esp
-4000738e: 8b 45 14 mov 0x14(%ebp),%eax
-40007391: 89 45 f8 mov %eax,-0x8(%ebp)
-40007394: 8b 45 f8 mov -0x8(%ebp),%eax
-40007397: 8b 00 mov (%eax),%eax
-40007399: 83 ec 08 sub $0x8,%esp
-4000739c: 50 push %eax
-4000739d: ff 75 08 pushl 0x8(%ebp)
-400073a0: e8 9a c6 ff ff call 40003a3f <get_filehandle>
-400073a5: 83 c4 10 add $0x10,%esp
-400073a8: 89 45 fc mov %eax,-0x4(%ebp)
-400073ab: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400073af: 74 11 je 400073c2 <rpc_io_tell+0x3a>
-400073b1: 8b 45 fc mov -0x4(%ebp),%eax
-400073b4: 8b 50 14 mov 0x14(%eax),%edx
-400073b7: 8b 40 10 mov 0x10(%eax),%eax
-400073ba: 89 45 f0 mov %eax,-0x10(%ebp)
-400073bd: 89 55 f4 mov %edx,-0xc(%ebp)
-400073c0: eb 0e jmp 400073d0 <rpc_io_tell+0x48>
-400073c2: c7 45 f0 ff ff ff ff movl $0xffffffff,-0x10(%ebp)
-400073c9: c7 45 f4 ff ff ff ff movl $0xffffffff,-0xc(%ebp)
-400073d0: 8d 45 f0 lea -0x10(%ebp),%eax
-400073d3: 50 push %eax
-400073d4: 6a 08 push $0x8
-400073d6: ff 75 0c pushl 0xc(%ebp)
-400073d9: ff 75 08 pushl 0x8(%ebp)
-400073dc: e8 6e c2 ff ff call 4000364f <rpc_send_response>
-400073e1: 83 c4 10 add $0x10,%esp
-400073e4: c9 leave
-400073e5: c3 ret
-
-400073e6 <rpc_io_link>:
-400073e6: 55 push %ebp
-400073e7: 89 e5 mov %esp,%ebp
-400073e9: 83 ec 28 sub $0x28,%esp
-400073ec: 8b 45 14 mov 0x14(%ebp),%eax
-400073ef: 89 45 ec mov %eax,-0x14(%ebp)
-400073f2: 83 7d 10 0b cmpl $0xb,0x10(%ebp)
-400073f6: 76 34 jbe 4000742c <rpc_io_link+0x46>
-400073f8: 8b 45 ec mov -0x14(%ebp),%eax
-400073fb: 8b 40 08 mov 0x8(%eax),%eax
-400073fe: 83 c0 0c add $0xc,%eax
-40007401: 3b 45 10 cmp 0x10(%ebp),%eax
-40007404: 77 26 ja 4000742c <rpc_io_link+0x46>
-40007406: 8b 45 ec mov -0x14(%ebp),%eax
-40007409: 8b 40 08 mov 0x8(%eax),%eax
-4000740c: 40 inc %eax
-4000740d: 8b 55 ec mov -0x14(%ebp),%edx
-40007410: 83 c2 0c add $0xc,%edx
-40007413: 83 ec 08 sub $0x8,%esp
-40007416: 50 push %eax
-40007417: 52 push %edx
-40007418: e8 cf 05 00 00 call 400079ec <strnlen>
-4000741d: 83 c4 10 add $0x10,%esp
-40007420: 89 c2 mov %eax,%edx
-40007422: 8b 45 ec mov -0x14(%ebp),%eax
-40007425: 8b 40 08 mov 0x8(%eax),%eax
-40007428: 39 c2 cmp %eax,%edx
-4000742a: 74 18 je 40007444 <rpc_io_link+0x5e>
-4000742c: 83 ec 04 sub $0x4,%esp
-4000742f: 6a fd push $0xfffffffd
-40007431: ff 75 0c pushl 0xc(%ebp)
-40007434: ff 75 08 pushl 0x8(%ebp)
-40007437: e8 5b c2 ff ff call 40003697 <rpc_send_int_response>
-4000743c: 83 c4 10 add $0x10,%esp
-4000743f: e9 ce 00 00 00 jmp 40007512 <rpc_io_link+0x12c>
-40007444: 8b 45 ec mov -0x14(%ebp),%eax
-40007447: 8b 00 mov (%eax),%eax
-40007449: 83 ec 08 sub $0x8,%esp
-4000744c: 50 push %eax
-4000744d: ff 75 08 pushl 0x8(%ebp)
-40007450: e8 ea c5 ff ff call 40003a3f <get_filehandle>
-40007455: 83 c4 10 add $0x10,%esp
-40007458: 89 45 f0 mov %eax,-0x10(%ebp)
-4000745b: 8b 45 ec mov -0x14(%ebp),%eax
-4000745e: 8b 40 04 mov 0x4(%eax),%eax
-40007461: 83 ec 08 sub $0x8,%esp
-40007464: 50 push %eax
-40007465: ff 75 08 pushl 0x8(%ebp)
-40007468: e8 d2 c5 ff ff call 40003a3f <get_filehandle>
-4000746d: 83 c4 10 add $0x10,%esp
-40007470: 89 45 f4 mov %eax,-0xc(%ebp)
-40007473: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40007477: 74 06 je 4000747f <rpc_io_link+0x99>
-40007479: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000747d: 75 15 jne 40007494 <rpc_io_link+0xae>
-4000747f: 83 ec 04 sub $0x4,%esp
-40007482: 6a ff push $0xffffffff
-40007484: ff 75 0c pushl 0xc(%ebp)
-40007487: ff 75 08 pushl 0x8(%ebp)
-4000748a: e8 08 c2 ff ff call 40003697 <rpc_send_int_response>
-4000748f: 83 c4 10 add $0x10,%esp
-40007492: eb 7e jmp 40007512 <rpc_io_link+0x12c>
-40007494: 8b 45 f4 mov -0xc(%ebp),%eax
-40007497: 8b 40 1c mov 0x1c(%eax),%eax
-4000749a: 8a 00 mov (%eax),%al
-4000749c: 0f b6 c0 movzbl %al,%eax
-4000749f: 83 ec 0c sub $0xc,%esp
-400074a2: 50 push %eax
-400074a3: e8 f7 c4 ff ff call 4000399f <get_typehandle>
-400074a8: 83 c4 10 add $0x10,%esp
-400074ab: 89 45 f8 mov %eax,-0x8(%ebp)
-400074ae: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400074b2: 74 4b je 400074ff <rpc_io_link+0x119>
-400074b4: 8b 45 f8 mov -0x8(%ebp),%eax
-400074b7: 8b 40 20 mov 0x20(%eax),%eax
-400074ba: 85 c0 test %eax,%eax
-400074bc: 74 41 je 400074ff <rpc_io_link+0x119>
-400074be: 8b 45 f8 mov -0x8(%ebp),%eax
-400074c1: 8b 50 20 mov 0x20(%eax),%edx
-400074c4: 8b 45 ec mov -0x14(%ebp),%eax
-400074c7: 83 c0 0c add $0xc,%eax
-400074ca: 83 ec 04 sub $0x4,%esp
-400074cd: 50 push %eax
-400074ce: ff 75 f4 pushl -0xc(%ebp)
-400074d1: ff 75 f0 pushl -0x10(%ebp)
-400074d4: ff d2 call *%edx
-400074d6: 83 c4 10 add $0x10,%esp
-400074d9: 89 45 fc mov %eax,-0x4(%ebp)
-400074dc: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400074e0: 74 07 je 400074e9 <rpc_io_link+0x103>
-400074e2: c7 45 fc fc ff ff ff movl $0xfffffffc,-0x4(%ebp)
-400074e9: 83 ec 04 sub $0x4,%esp
-400074ec: ff 75 fc pushl -0x4(%ebp)
-400074ef: ff 75 0c pushl 0xc(%ebp)
-400074f2: ff 75 08 pushl 0x8(%ebp)
-400074f5: e8 9d c1 ff ff call 40003697 <rpc_send_int_response>
-400074fa: 83 c4 10 add $0x10,%esp
-400074fd: eb 13 jmp 40007512 <rpc_io_link+0x12c>
-400074ff: 83 ec 04 sub $0x4,%esp
-40007502: 6a fe push $0xfffffffe
-40007504: ff 75 0c pushl 0xc(%ebp)
-40007507: ff 75 08 pushl 0x8(%ebp)
-4000750a: e8 88 c1 ff ff call 40003697 <rpc_send_int_response>
-4000750f: 83 c4 10 add $0x10,%esp
-40007512: c9 leave
-40007513: c3 ret
-
-40007514 <rpc_io_unlink>:
-40007514: 55 push %ebp
-40007515: 89 e5 mov %esp,%ebp
-40007517: 83 ec 18 sub $0x18,%esp
-4000751a: 8b 45 14 mov 0x14(%ebp),%eax
-4000751d: 89 45 f0 mov %eax,-0x10(%ebp)
-40007520: 83 7d 10 07 cmpl $0x7,0x10(%ebp)
-40007524: 76 34 jbe 4000755a <rpc_io_unlink+0x46>
-40007526: 8b 45 f0 mov -0x10(%ebp),%eax
-40007529: 8b 40 04 mov 0x4(%eax),%eax
-4000752c: 83 c0 08 add $0x8,%eax
-4000752f: 3b 45 10 cmp 0x10(%ebp),%eax
-40007532: 77 26 ja 4000755a <rpc_io_unlink+0x46>
-40007534: 8b 45 f0 mov -0x10(%ebp),%eax
-40007537: 8b 40 04 mov 0x4(%eax),%eax
-4000753a: 40 inc %eax
-4000753b: 8b 55 f0 mov -0x10(%ebp),%edx
-4000753e: 83 c2 08 add $0x8,%edx
-40007541: 83 ec 08 sub $0x8,%esp
-40007544: 50 push %eax
-40007545: 52 push %edx
-40007546: e8 a1 04 00 00 call 400079ec <strnlen>
-4000754b: 83 c4 10 add $0x10,%esp
-4000754e: 89 c2 mov %eax,%edx
-40007550: 8b 45 f0 mov -0x10(%ebp),%eax
-40007553: 8b 40 04 mov 0x4(%eax),%eax
-40007556: 39 c2 cmp %eax,%edx
-40007558: 74 18 je 40007572 <rpc_io_unlink+0x5e>
-4000755a: 83 ec 04 sub $0x4,%esp
-4000755d: 6a fd push $0xfffffffd
-4000755f: ff 75 0c pushl 0xc(%ebp)
-40007562: ff 75 08 pushl 0x8(%ebp)
-40007565: e8 2d c1 ff ff call 40003697 <rpc_send_int_response>
-4000756a: 83 c4 10 add $0x10,%esp
-4000756d: e9 ad 00 00 00 jmp 4000761f <rpc_io_unlink+0x10b>
-40007572: 8b 45 f0 mov -0x10(%ebp),%eax
-40007575: 8b 00 mov (%eax),%eax
-40007577: 83 ec 08 sub $0x8,%esp
-4000757a: 50 push %eax
-4000757b: ff 75 08 pushl 0x8(%ebp)
-4000757e: e8 bc c4 ff ff call 40003a3f <get_filehandle>
-40007583: 83 c4 10 add $0x10,%esp
-40007586: 89 45 f4 mov %eax,-0xc(%ebp)
-40007589: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000758d: 75 15 jne 400075a4 <rpc_io_unlink+0x90>
-4000758f: 83 ec 04 sub $0x4,%esp
-40007592: 6a ff push $0xffffffff
-40007594: ff 75 0c pushl 0xc(%ebp)
-40007597: ff 75 08 pushl 0x8(%ebp)
-4000759a: e8 f8 c0 ff ff call 40003697 <rpc_send_int_response>
-4000759f: 83 c4 10 add $0x10,%esp
-400075a2: eb 7b jmp 4000761f <rpc_io_unlink+0x10b>
-400075a4: 8b 45 f4 mov -0xc(%ebp),%eax
-400075a7: 8b 40 1c mov 0x1c(%eax),%eax
-400075aa: 8a 00 mov (%eax),%al
-400075ac: 0f b6 c0 movzbl %al,%eax
-400075af: 83 ec 0c sub $0xc,%esp
-400075b2: 50 push %eax
-400075b3: e8 e7 c3 ff ff call 4000399f <get_typehandle>
-400075b8: 83 c4 10 add $0x10,%esp
-400075bb: 89 45 f8 mov %eax,-0x8(%ebp)
-400075be: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400075c2: 74 48 je 4000760c <rpc_io_unlink+0xf8>
-400075c4: 8b 45 f8 mov -0x8(%ebp),%eax
-400075c7: 8b 40 20 mov 0x20(%eax),%eax
-400075ca: 85 c0 test %eax,%eax
-400075cc: 74 3e je 4000760c <rpc_io_unlink+0xf8>
-400075ce: 8b 45 f8 mov -0x8(%ebp),%eax
-400075d1: 8b 50 24 mov 0x24(%eax),%edx
-400075d4: 8b 45 f0 mov -0x10(%ebp),%eax
-400075d7: 83 c0 08 add $0x8,%eax
-400075da: 83 ec 08 sub $0x8,%esp
-400075dd: 50 push %eax
-400075de: ff 75 f4 pushl -0xc(%ebp)
-400075e1: ff d2 call *%edx
-400075e3: 83 c4 10 add $0x10,%esp
-400075e6: 89 45 fc mov %eax,-0x4(%ebp)
-400075e9: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400075ed: 74 07 je 400075f6 <rpc_io_unlink+0xe2>
-400075ef: c7 45 fc fc ff ff ff movl $0xfffffffc,-0x4(%ebp)
-400075f6: 83 ec 04 sub $0x4,%esp
-400075f9: ff 75 fc pushl -0x4(%ebp)
-400075fc: ff 75 0c pushl 0xc(%ebp)
-400075ff: ff 75 08 pushl 0x8(%ebp)
-40007602: e8 90 c0 ff ff call 40003697 <rpc_send_int_response>
-40007607: 83 c4 10 add $0x10,%esp
-4000760a: eb 13 jmp 4000761f <rpc_io_unlink+0x10b>
-4000760c: 83 ec 04 sub $0x4,%esp
-4000760f: 6a fe push $0xfffffffe
-40007611: ff 75 0c pushl 0xc(%ebp)
-40007614: ff 75 08 pushl 0x8(%ebp)
-40007617: e8 7b c0 ff ff call 40003697 <rpc_send_int_response>
-4000761c: 83 c4 10 add $0x10,%esp
-4000761f: c9 leave
-40007620: c3 ret
-
-40007621 <lostio_open>:
-40007621: 55 push %ebp
-40007622: 89 e5 mov %esp,%ebp
-40007624: 83 ec 28 sub $0x28,%esp
-40007627: 8b 45 0c mov 0xc(%ebp),%eax
-4000762a: 88 45 dc mov %al,-0x24(%ebp)
-4000762d: 8b 45 08 mov 0x8(%ebp),%eax
-40007630: 83 ec 0c sub $0xc,%esp
-40007633: 50 push %eax
-40007634: e8 bf c5 ff ff call 40003bf8 <vfstree_get_node_by_path>
-40007639: 83 c4 10 add $0x10,%esp
-4000763c: 89 45 ec mov %eax,-0x14(%ebp)
-4000763f: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-40007643: 0f 85 02 01 00 00 jne 4000774b <lostio_open+0x12a>
-40007649: 8b 45 08 mov 0x8(%ebp),%eax
-4000764c: 83 ec 0c sub $0xc,%esp
-4000764f: 50 push %eax
-40007650: e8 2b c4 ff ff call 40003a80 <vfstree_dirname>
-40007655: 83 c4 10 add $0x10,%esp
-40007658: 89 45 f8 mov %eax,-0x8(%ebp)
-4000765b: 83 ec 0c sub $0xc,%esp
-4000765e: ff 75 f8 pushl -0x8(%ebp)
-40007661: e8 92 c5 ff ff call 40003bf8 <vfstree_get_node_by_path>
-40007666: 83 c4 10 add $0x10,%esp
-40007669: 89 45 fc mov %eax,-0x4(%ebp)
-4000766c: 83 ec 0c sub $0xc,%esp
-4000766f: ff 75 f8 pushl -0x8(%ebp)
-40007672: e8 38 13 00 00 call 400089af <free>
-40007677: 83 c4 10 add $0x10,%esp
-4000767a: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000767e: 74 61 je 400076e1 <lostio_open+0xc0>
-40007680: 8b 45 fc mov -0x4(%ebp),%eax
-40007683: 8a 00 mov (%eax),%al
-40007685: 0f b6 c0 movzbl %al,%eax
-40007688: 83 ec 0c sub $0xc,%esp
-4000768b: 50 push %eax
-4000768c: e8 0e c3 ff ff call 4000399f <get_typehandle>
-40007691: 83 c4 10 add $0x10,%esp
-40007694: 89 45 f0 mov %eax,-0x10(%ebp)
-40007697: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-4000769b: 74 38 je 400076d5 <lostio_open+0xb4>
-4000769d: 8b 45 f0 mov -0x10(%ebp),%eax
-400076a0: 8b 40 04 mov 0x4(%eax),%eax
-400076a3: 85 c0 test %eax,%eax
-400076a5: 74 2e je 400076d5 <lostio_open+0xb4>
-400076a7: 8b 45 f0 mov -0x10(%ebp),%eax
-400076aa: 8b 50 04 mov 0x4(%eax),%edx
-400076ad: 0f b6 45 dc movzbl -0x24(%ebp),%eax
-400076b1: ff 75 14 pushl 0x14(%ebp)
-400076b4: ff 75 10 pushl 0x10(%ebp)
-400076b7: 50 push %eax
-400076b8: 8d 45 08 lea 0x8(%ebp),%eax
-400076bb: 50 push %eax
-400076bc: ff d2 call *%edx
-400076be: 83 c4 10 add $0x10,%esp
-400076c1: 85 c0 test %eax,%eax
-400076c3: 0f 85 82 00 00 00 jne 4000774b <lostio_open+0x12a>
-400076c9: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-400076d0: e9 4f 02 00 00 jmp 40007924 <lostio_open+0x303>
-400076d5: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-400076dc: e9 43 02 00 00 jmp 40007924 <lostio_open+0x303>
-400076e1: 83 ec 0c sub $0xc,%esp
-400076e4: 6a 00 push $0x0
-400076e6: e8 b4 c2 ff ff call 4000399f <get_typehandle>
-400076eb: 83 c4 10 add $0x10,%esp
-400076ee: 89 45 f0 mov %eax,-0x10(%ebp)
-400076f1: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400076f5: 74 0a je 40007701 <lostio_open+0xe0>
-400076f7: 8b 45 f0 mov -0x10(%ebp),%eax
-400076fa: 8b 40 04 mov 0x4(%eax),%eax
-400076fd: 85 c0 test %eax,%eax
-400076ff: 75 20 jne 40007721 <lostio_open+0x100>
-40007701: 8b 45 08 mov 0x8(%ebp),%eax
-40007704: 83 ec 08 sub $0x8,%esp
-40007707: 50 push %eax
-40007708: 68 31 9c 00 40 push $0x40009c31
-4000770d: e8 27 ec ff ff call 40006339 <printf>
-40007712: 83 c4 10 add $0x10,%esp
-40007715: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-4000771c: e9 03 02 00 00 jmp 40007924 <lostio_open+0x303>
-40007721: 8b 45 f0 mov -0x10(%ebp),%eax
-40007724: 8b 50 04 mov 0x4(%eax),%edx
-40007727: 0f b6 45 dc movzbl -0x24(%ebp),%eax
-4000772b: ff 75 14 pushl 0x14(%ebp)
-4000772e: ff 75 10 pushl 0x10(%ebp)
-40007731: 50 push %eax
-40007732: 8d 45 08 lea 0x8(%ebp),%eax
-40007735: 50 push %eax
-40007736: ff d2 call *%edx
-40007738: 83 c4 10 add $0x10,%esp
-4000773b: 85 c0 test %eax,%eax
-4000773d: 75 0c jne 4000774b <lostio_open+0x12a>
-4000773f: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-40007746: e9 d9 01 00 00 jmp 40007924 <lostio_open+0x303>
-4000774b: 8b 45 08 mov 0x8(%ebp),%eax
-4000774e: 83 ec 0c sub $0xc,%esp
-40007751: 50 push %eax
-40007752: e8 a1 c4 ff ff call 40003bf8 <vfstree_get_node_by_path>
-40007757: 83 c4 10 add $0x10,%esp
-4000775a: 89 45 ec mov %eax,-0x14(%ebp)
-4000775d: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-40007761: 74 77 je 400077da <lostio_open+0x1b9>
-40007763: 0f b6 45 dc movzbl -0x24(%ebp),%eax
-40007767: 83 e0 10 and $0x10,%eax
-4000776a: 85 c0 test %eax,%eax
-4000776c: 74 1b je 40007789 <lostio_open+0x168>
-4000776e: 8b 45 ec mov -0x14(%ebp),%eax
-40007771: 8b 40 1c mov 0x1c(%eax),%eax
-40007774: 25 00 00 02 00 and $0x20000,%eax
-40007779: 85 c0 test %eax,%eax
-4000777b: 75 0c jne 40007789 <lostio_open+0x168>
-4000777d: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-40007784: e9 9b 01 00 00 jmp 40007924 <lostio_open+0x303>
-40007789: 8b 45 ec mov -0x14(%ebp),%eax
-4000778c: 8a 00 mov (%eax),%al
-4000778e: 0f b6 c0 movzbl %al,%eax
-40007791: 83 ec 0c sub $0xc,%esp
-40007794: 50 push %eax
-40007795: e8 05 c2 ff ff call 4000399f <get_typehandle>
-4000779a: 83 c4 10 add $0x10,%esp
-4000779d: 89 45 f0 mov %eax,-0x10(%ebp)
-400077a0: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400077a4: 74 34 je 400077da <lostio_open+0x1b9>
-400077a6: 8b 45 f0 mov -0x10(%ebp),%eax
-400077a9: 8b 40 08 mov 0x8(%eax),%eax
-400077ac: 85 c0 test %eax,%eax
-400077ae: 74 2a je 400077da <lostio_open+0x1b9>
-400077b0: 8b 45 f0 mov -0x10(%ebp),%eax
-400077b3: 8b 50 08 mov 0x8(%eax),%edx
-400077b6: 0f b6 45 dc movzbl -0x24(%ebp),%eax
-400077ba: ff 75 14 pushl 0x14(%ebp)
-400077bd: ff 75 10 pushl 0x10(%ebp)
-400077c0: 50 push %eax
-400077c1: 8d 45 08 lea 0x8(%ebp),%eax
-400077c4: 50 push %eax
-400077c5: ff d2 call *%edx
-400077c7: 83 c4 10 add $0x10,%esp
-400077ca: 85 c0 test %eax,%eax
-400077cc: 75 0c jne 400077da <lostio_open+0x1b9>
-400077ce: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-400077d5: e9 4a 01 00 00 jmp 40007924 <lostio_open+0x303>
-400077da: 8b 45 08 mov 0x8(%ebp),%eax
-400077dd: 83 ec 0c sub $0xc,%esp
-400077e0: 50 push %eax
-400077e1: e8 12 c4 ff ff call 40003bf8 <vfstree_get_node_by_path>
-400077e6: 83 c4 10 add $0x10,%esp
-400077e9: 89 45 ec mov %eax,-0x14(%ebp)
-400077ec: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-400077f0: 75 0c jne 400077fe <lostio_open+0x1dd>
-400077f2: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-400077f9: e9 26 01 00 00 jmp 40007924 <lostio_open+0x303>
-400077fe: 0f b6 45 dc movzbl -0x24(%ebp),%eax
-40007802: 83 e0 10 and $0x10,%eax
-40007805: 85 c0 test %eax,%eax
-40007807: 74 1b je 40007824 <lostio_open+0x203>
-40007809: 8b 45 ec mov -0x14(%ebp),%eax
-4000780c: 8b 40 1c mov 0x1c(%eax),%eax
-4000780f: 25 00 00 02 00 and $0x20000,%eax
-40007814: 85 c0 test %eax,%eax
-40007816: 75 0c jne 40007824 <lostio_open+0x203>
-40007818: c7 45 d8 00 00 00 00 movl $0x0,-0x28(%ebp)
-4000781f: e9 00 01 00 00 jmp 40007924 <lostio_open+0x303>
-40007824: 83 ec 0c sub $0xc,%esp
-40007827: 6a 20 push $0x20
-40007829: e8 aa 0a 00 00 call 400082d8 <malloc>
-4000782e: 83 c4 10 add $0x10,%esp
-40007831: 89 45 f4 mov %eax,-0xc(%ebp)
-40007834: 8b 15 50 a0 00 40 mov 0x4000a050,%edx
-4000783a: 8b 45 f4 mov -0xc(%ebp),%eax
-4000783d: 89 10 mov %edx,(%eax)
-4000783f: 8d 42 01 lea 0x1(%edx),%eax
-40007842: a3 50 a0 00 40 mov %eax,0x4000a050
-40007847: 8b 55 f4 mov -0xc(%ebp),%edx
-4000784a: 8b 45 10 mov 0x10(%ebp),%eax
-4000784d: 89 42 04 mov %eax,0x4(%edx)
-40007850: 0f b6 55 dc movzbl -0x24(%ebp),%edx
-40007854: 8b 45 f4 mov -0xc(%ebp),%eax
-40007857: 89 50 08 mov %edx,0x8(%eax)
-4000785a: 83 ec 0c sub $0xc,%esp
-4000785d: 6a 25 push $0x25
-4000785f: e8 74 0a 00 00 call 400082d8 <malloc>
-40007864: 83 c4 10 add $0x10,%esp
-40007867: 89 c2 mov %eax,%edx
-40007869: 8b 45 f4 mov -0xc(%ebp),%eax
-4000786c: 89 50 0c mov %edx,0xc(%eax)
-4000786f: 8b 45 f4 mov -0xc(%ebp),%eax
-40007872: c7 40 10 00 00 00 00 movl $0x0,0x10(%eax)
-40007879: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax)
-40007880: 8b 45 f4 mov -0xc(%ebp),%eax
-40007883: c7 40 18 00 00 00 00 movl $0x0,0x18(%eax)
-4000788a: 8b 55 f4 mov -0xc(%ebp),%edx
-4000788d: 8b 45 ec mov -0x14(%ebp),%eax
-40007890: 89 42 1c mov %eax,0x1c(%edx)
-40007893: 8b 45 f4 mov -0xc(%ebp),%eax
-40007896: 8b 40 0c mov 0xc(%eax),%eax
-40007899: 83 ec 04 sub $0x4,%esp
-4000789c: 6a 25 push $0x25
-4000789e: ff 75 14 pushl 0x14(%ebp)
-400078a1: 50 push %eax
-400078a2: e8 c1 16 00 00 call 40008f68 <memcpy>
-400078a7: 83 c4 10 add $0x10,%esp
-400078aa: a1 e4 a7 00 40 mov 0x4000a7e4,%eax
-400078af: 83 ec 08 sub $0x8,%esp
-400078b2: ff 75 f4 pushl -0xc(%ebp)
-400078b5: 50 push %eax
-400078b6: e8 11 04 00 00 call 40007ccc <list_push>
-400078bb: 83 c4 10 add $0x10,%esp
-400078be: a3 e4 a7 00 40 mov %eax,0x4000a7e4
-400078c3: 8b 45 ec mov -0x14(%ebp),%eax
-400078c6: 8b 50 0c mov 0xc(%eax),%edx
-400078c9: 8b 40 08 mov 0x8(%eax),%eax
-400078cc: 09 d0 or %edx,%eax
-400078ce: 85 c0 test %eax,%eax
-400078d0: 75 14 jne 400078e6 <lostio_open+0x2c5>
-400078d2: 8b 45 f4 mov -0xc(%ebp),%eax
-400078d5: 8b 40 08 mov 0x8(%eax),%eax
-400078d8: 89 c2 mov %eax,%edx
-400078da: 81 ca 00 00 01 00 or $0x10000,%edx
-400078e0: 8b 45 f4 mov -0xc(%ebp),%eax
-400078e3: 89 50 08 mov %edx,0x8(%eax)
-400078e6: 8b 45 ec mov -0x14(%ebp),%eax
-400078e9: 8a 00 mov (%eax),%al
-400078eb: 0f b6 c0 movzbl %al,%eax
-400078ee: 83 ec 0c sub $0xc,%esp
-400078f1: 50 push %eax
-400078f2: e8 a8 c0 ff ff call 4000399f <get_typehandle>
-400078f7: 83 c4 10 add $0x10,%esp
-400078fa: 89 45 f0 mov %eax,-0x10(%ebp)
-400078fd: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-40007901: 74 1b je 4000791e <lostio_open+0x2fd>
-40007903: 8b 45 f0 mov -0x10(%ebp),%eax
-40007906: 8b 40 0c mov 0xc(%eax),%eax
-40007909: 85 c0 test %eax,%eax
-4000790b: 74 11 je 4000791e <lostio_open+0x2fd>
-4000790d: 8b 45 f0 mov -0x10(%ebp),%eax
-40007910: 8b 40 0c mov 0xc(%eax),%eax
-40007913: 83 ec 0c sub $0xc,%esp
-40007916: ff 75 f4 pushl -0xc(%ebp)
-40007919: ff d0 call *%eax
-4000791b: 83 c4 10 add $0x10,%esp
-4000791e: 8b 45 f4 mov -0xc(%ebp),%eax
-40007921: 89 45 d8 mov %eax,-0x28(%ebp)
-40007924: 8b 45 d8 mov -0x28(%ebp),%eax
-40007927: c9 leave
-40007928: c3 ret
-
-40007929 <lostio_close>:
-40007929: 55 push %ebp
-4000792a: 89 e5 mov %esp,%ebp
-4000792c: 83 ec 18 sub $0x18,%esp
-4000792f: e8 64 b8 ff ff call 40003198 <p>
-40007934: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-4000793b: eb 0d jmp 4000794a <lostio_close+0x21>
-4000793d: 8b 45 f4 mov -0xc(%ebp),%eax
-40007940: 8b 00 mov (%eax),%eax
-40007942: 3b 45 0c cmp 0xc(%ebp),%eax
-40007945: 74 20 je 40007967 <lostio_close+0x3e>
-40007947: ff 45 fc incl -0x4(%ebp)
-4000794a: a1 e4 a7 00 40 mov 0x4000a7e4,%eax
-4000794f: 83 ec 08 sub $0x8,%esp
-40007952: ff 75 fc pushl -0x4(%ebp)
-40007955: 50 push %eax
-40007956: e8 32 05 00 00 call 40007e8d <list_get_element_at>
-4000795b: 83 c4 10 add $0x10,%esp
-4000795e: 89 45 f4 mov %eax,-0xc(%ebp)
-40007961: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40007965: 75 d6 jne 4000793d <lostio_close+0x14>
-40007967: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000796b: 75 0e jne 4000797b <lostio_close+0x52>
-4000796d: e8 32 b8 ff ff call 400031a4 <v>
-40007972: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007979: eb 69 jmp 400079e4 <lostio_close+0xbb>
-4000797b: a1 e4 a7 00 40 mov 0x4000a7e4,%eax
-40007980: 83 ec 08 sub $0x8,%esp
-40007983: ff 75 fc pushl -0x4(%ebp)
-40007986: 50 push %eax
-40007987: e8 ed 05 00 00 call 40007f79 <list_remove>
-4000798c: 83 c4 10 add $0x10,%esp
-4000798f: e8 10 b8 ff ff call 400031a4 <v>
-40007994: 8b 45 f4 mov -0xc(%ebp),%eax
-40007997: 8b 40 1c mov 0x1c(%eax),%eax
-4000799a: 8a 00 mov (%eax),%al
-4000799c: 0f b6 c0 movzbl %al,%eax
-4000799f: 83 ec 0c sub $0xc,%esp
-400079a2: 50 push %eax
-400079a3: e8 f7 bf ff ff call 4000399f <get_typehandle>
-400079a8: 83 c4 10 add $0x10,%esp
-400079ab: 89 45 f8 mov %eax,-0x8(%ebp)
-400079ae: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400079b2: 74 1b je 400079cf <lostio_close+0xa6>
-400079b4: 8b 45 f8 mov -0x8(%ebp),%eax
-400079b7: 8b 40 1c mov 0x1c(%eax),%eax
-400079ba: 85 c0 test %eax,%eax
-400079bc: 74 11 je 400079cf <lostio_close+0xa6>
-400079be: 8b 45 f8 mov -0x8(%ebp),%eax
-400079c1: 8b 40 1c mov 0x1c(%eax),%eax
-400079c4: 83 ec 0c sub $0xc,%esp
-400079c7: ff 75 f4 pushl -0xc(%ebp)
-400079ca: ff d0 call *%eax
-400079cc: 83 c4 10 add $0x10,%esp
-400079cf: 83 ec 0c sub $0xc,%esp
-400079d2: ff 75 f4 pushl -0xc(%ebp)
-400079d5: e8 d5 0f 00 00 call 400089af <free>
-400079da: 83 c4 10 add $0x10,%esp
-400079dd: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%ebp)
-400079e4: 8b 45 ec mov -0x14(%ebp),%eax
-400079e7: c9 leave
-400079e8: c3 ret
-400079e9: 90 nop
-400079ea: 90 nop
-400079eb: 90 nop
-
-400079ec <strnlen>:
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "cdi.h"
-400079ec: 55 push %ebp
-400079ed: 89 e5 mov %esp,%ebp
-400079ef: 83 ec 10 sub $0x10,%esp
-#include "cdi/storage.h"
-400079f2: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-#include "cdi/misc.h"
-#include "cdi/io.h"
-400079f9: eb 03 jmp 400079fe <strnlen+0x12>
-
-400079fb: ff 45 fc incl -0x4(%ebp)
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-400079fe: 8b 45 08 mov 0x8(%ebp),%eax
-40007a01: 8a 00 mov (%eax),%al
-40007a03: 84 c0 test %al,%al
-40007a05: 0f 95 c0 setne %al
-40007a08: ff 45 08 incl 0x8(%ebp)
-40007a0b: 83 f0 01 xor $0x1,%eax
-40007a0e: 84 c0 test %al,%al
-40007a10: 75 09 jne 40007a1b <strnlen+0x2f>
-40007a12: ff 4d 0c decl 0xc(%ebp)
-40007a15: 83 7d 0c ff cmpl $0xffffffff,0xc(%ebp)
-40007a19: 75 e0 jne 400079fb <strnlen+0xf>
-
-#include "device.h"
-
-
-40007a1b: 8b 45 fc mov -0x4(%ebp),%eax
-/**
-40007a1e: c9 leave
-40007a1f: c3 ret
-
-40007a20 <itoa>:
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
- */
-40007a20: 55 push %ebp
-40007a21: 89 e5 mov %esp,%ebp
-40007a23: 83 ec 30 sub $0x30,%esp
-int ata_drv_identify(struct ata_device* dev)
-{
-40007a26: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
-40007a2d: 8b 45 08 mov 0x8(%ebp),%eax
-40007a30: ba 00 00 00 00 mov $0x0,%edx
-40007a35: f7 75 10 divl 0x10(%ebp)
-40007a38: 89 55 fc mov %edx,-0x4(%ebp)
- .dev = dev,
-40007a3b: 83 7d fc 09 cmpl $0x9,-0x4(%ebp)
-40007a3f: 77 12 ja 40007a53 <itoa+0x33>
-40007a41: 8b 55 f4 mov -0xc(%ebp),%edx
-40007a44: 8b 45 fc mov -0x4(%ebp),%eax
-40007a47: 83 c0 30 add $0x30,%eax
-40007a4a: 88 44 15 d3 mov %al,-0x2d(%ebp,%edx,1)
-40007a4e: ff 45 f4 incl -0xc(%ebp)
-40007a51: eb 10 jmp 40007a63 <itoa+0x43>
-
-40007a53: 8b 55 f4 mov -0xc(%ebp),%edx
-40007a56: 8b 45 fc mov -0x4(%ebp),%eax
-40007a59: 83 c0 37 add $0x37,%eax
-40007a5c: 88 44 15 d3 mov %al,-0x2d(%ebp,%edx,1)
-40007a60: ff 45 f4 incl -0xc(%ebp)
- .flags.direction = READ,
-40007a63: 8b 45 08 mov 0x8(%ebp),%eax
-40007a66: ba 00 00 00 00 mov $0x0,%edx
-40007a6b: f7 75 10 divl 0x10(%ebp)
-40007a6e: 89 45 08 mov %eax,0x8(%ebp)
-40007a71: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007a75: 75 b6 jne 40007a2d <itoa+0xd>
- .flags.poll = 1,
-40007a77: 8b 45 f4 mov -0xc(%ebp),%eax
-40007a7a: c6 44 05 d3 00 movb $0x0,-0x2d(%ebp,%eax,1)
- .flags.lba = 0,
-
-40007a7f: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-40007a86: eb 18 jmp 40007aa0 <itoa+0x80>
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-40007a88: 8b 45 f8 mov -0x8(%ebp),%eax
-40007a8b: 89 c2 mov %eax,%edx
-40007a8d: 03 55 0c add 0xc(%ebp),%edx
-40007a90: 8b 45 f4 mov -0xc(%ebp),%eax
-40007a93: 48 dec %eax
-40007a94: 8a 44 05 d3 mov -0x2d(%ebp,%eax,1),%al
-40007a98: 88 02 mov %al,(%edx)
- .block_count = 1,
-40007a9a: ff 45 f8 incl -0x8(%ebp)
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
-40007a9d: ff 4d f4 decl -0xc(%ebp)
-40007aa0: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40007aa4: 75 e2 jne 40007a88 <itoa+0x68>
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-40007aa6: 8b 45 f8 mov -0x8(%ebp),%eax
-40007aa9: 03 45 0c add 0xc(%ebp),%eax
-40007aac: c6 00 00 movb $0x0,(%eax)
-
-40007aaf: c9 leave
-40007ab0: c3 ret
-
-40007ab1 <atoi>:
- .error = 0
- };
-40007ab1: 55 push %ebp
-40007ab2: 89 e5 mov %esp,%ebp
-40007ab4: 83 ec 14 sub $0x14,%esp
-
-40007ab7: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
- // Request starten
-40007abe: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40007ac5: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40007acc: eb 3d jmp 40007b0b <atoi+0x5a>
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-40007ace: 8b 45 f8 mov -0x8(%ebp),%eax
-40007ad1: 03 45 08 add 0x8(%ebp),%eax
-40007ad4: 8a 00 mov (%eax),%al
-40007ad6: 3c 2f cmp $0x2f,%al
-40007ad8: 7e 3d jle 40007b17 <atoi+0x66>
-40007ada: 8b 45 f8 mov -0x8(%ebp),%eax
-40007add: 03 45 08 add 0x8(%ebp),%eax
-40007ae0: 8a 00 mov (%eax),%al
-40007ae2: 3c 39 cmp $0x39,%al
-40007ae4: 7f 31 jg 40007b17 <atoi+0x66>
- }
-
-40007ae6: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40007aea: 75 09 jne 40007af5 <atoi+0x44>
-40007aec: c7 45 f4 01 00 00 00 movl $0x1,-0xc(%ebp)
-40007af3: eb 10 jmp 40007b05 <atoi+0x54>
- // Ein ATA-Geraet
-40007af5: 8b 45 f4 mov -0xc(%ebp),%eax
-40007af8: 89 c2 mov %eax,%edx
-40007afa: c1 e2 02 shl $0x2,%edx
-40007afd: 01 c2 add %eax,%edx
-40007aff: 8d 04 12 lea (%edx,%edx,1),%eax
-40007b02: 89 45 f4 mov %eax,-0xc(%ebp)
- dev->atapi = 0;
-40007b05: ff 45 f0 incl -0x10(%ebp)
- .error = 0
- };
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
-40007b08: ff 45 f8 incl -0x8(%ebp)
-40007b0b: 8b 45 f8 mov -0x8(%ebp),%eax
-40007b0e: 03 45 08 add 0x8(%ebp),%eax
-40007b11: 8a 00 mov (%eax),%al
-40007b13: 84 c0 test %al,%al
-40007b15: 75 b7 jne 40007ace <atoi+0x1d>
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-40007b17: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-
-40007b1e: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
-40007b25: eb 2f jmp 40007b56 <atoi+0xa5>
- return 1;
-}
-40007b27: 8b 45 f8 mov -0x8(%ebp),%eax
-40007b2a: 03 45 08 add 0x8(%ebp),%eax
-40007b2d: 8a 00 mov (%eax),%al
-40007b2f: 0f be c0 movsbl %al,%eax
-40007b32: 83 e8 30 sub $0x30,%eax
-40007b35: 0f af 45 f4 imul -0xc(%ebp),%eax
-40007b39: 01 45 fc add %eax,-0x4(%ebp)
-
-40007b3c: 8b 55 f4 mov -0xc(%ebp),%edx
-40007b3f: c7 45 ec cd cc cc cc movl $0xcccccccd,-0x14(%ebp)
-40007b46: 8b 45 ec mov -0x14(%ebp),%eax
-40007b49: f7 e2 mul %edx
-40007b4b: 89 d0 mov %edx,%eax
-40007b4d: c1 e8 03 shr $0x3,%eax
-40007b50: 89 45 f4 mov %eax,-0xc(%ebp)
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-40007b53: ff 45 f8 incl -0x8(%ebp)
-40007b56: 8b 45 f8 mov -0x8(%ebp),%eax
-40007b59: 3b 45 f0 cmp -0x10(%ebp),%eax
-40007b5c: 72 c9 jb 40007b27 <atoi+0x76>
- return 1;
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
-40007b5e: 8b 45 fc mov -0x4(%ebp),%eax
- *
-40007b61: c9 leave
-40007b62: c3 ret
-
-40007b63 <atol>:
- * @param start LBA des Startsektors
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
-40007b63: 55 push %ebp
-40007b64: 89 e5 mov %esp,%ebp
-40007b66: 83 ec 14 sub $0x14,%esp
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40007b69: 8b 45 08 mov 0x8(%ebp),%eax
-40007b6c: 8a 00 mov (%eax),%al
-40007b6e: 84 c0 test %al,%al
-40007b70: 75 0c jne 40007b7e <atol+0x1b>
- */
-40007b72: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007b79: e9 9d 00 00 00 jmp 40007c1b <atol+0xb8>
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40007b7e: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%ebp)
-{
- int result = 1;
-40007b85: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- struct ata_request request;
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
-40007b8c: 8b 45 08 mov 0x8(%ebp),%eax
-40007b8f: 8a 00 mov (%eax),%al
-40007b91: 3c 2d cmp $0x2d,%al
-40007b93: 75 0c jne 40007ba1 <atol+0x3e>
- // muss unter Umstaenden mehrmals gelesen werden.
-40007b95: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%ebp)
- uint16_t current_count;
-40007b9c: ff 45 08 incl 0x8(%ebp)
-40007b9f: eb 5c jmp 40007bfd <atol+0x9a>
- void* current_buffer = buffer;
-40007ba1: 8b 45 08 mov 0x8(%ebp),%eax
-40007ba4: 8a 00 mov (%eax),%al
-40007ba6: 3c 2b cmp $0x2b,%al
-40007ba8: 75 53 jne 40007bfd <atol+0x9a>
- uint64_t lba = start;
-40007baa: ff 45 08 incl 0x8(%ebp)
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-40007bad: eb 4e jmp 40007bfd <atol+0x9a>
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-40007baf: 8b 45 08 mov 0x8(%ebp),%eax
-40007bb2: 8a 00 mov (%eax),%al
-40007bb4: 88 45 ff mov %al,-0x1(%ebp)
- while (count_left > 0) {
-40007bb7: 80 7d ff 2f cmpb $0x2f,-0x1(%ebp)
-40007bbb: 7e 29 jle 40007be6 <atol+0x83>
-40007bbd: 80 7d ff 39 cmpb $0x39,-0x1(%ebp)
-40007bc1: 7f 23 jg 40007be6 <atol+0x83>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-40007bc3: ff 45 f8 incl -0x8(%ebp)
- if (count_left > 256) {
- current_count = 256;
-40007bc6: 8b 55 f4 mov -0xc(%ebp),%edx
-40007bc9: 89 d0 mov %edx,%eax
-40007bcb: c1 e0 02 shl $0x2,%eax
-40007bce: 01 d0 add %edx,%eax
-40007bd0: d1 e0 shl %eax
-40007bd2: 89 c2 mov %eax,%edx
-40007bd4: 0f be 45 ff movsbl -0x1(%ebp),%eax
-40007bd8: 8d 04 02 lea (%edx,%eax,1),%eax
-40007bdb: 83 e8 30 sub $0x30,%eax
-40007bde: 89 45 f4 mov %eax,-0xc(%ebp)
- current_count = count_left;
- }
-
- // Request vorbereiten
- request.dev = dev;
- // TODO: DMA, UltraDMA...
-40007be1: ff 45 08 incl 0x8(%ebp)
-40007be4: eb 17 jmp 40007bfd <atol+0x9a>
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
- } else {
- current_count = count_left;
-40007be6: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40007bea: 75 09 jne 40007bf5 <atol+0x92>
- }
-40007bec: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007bf3: eb 26 jmp 40007c1b <atol+0xb8>
-
- // Request vorbereiten
-40007bf5: 8b 45 f4 mov -0xc(%ebp),%eax
-40007bf8: 89 45 ec mov %eax,-0x14(%ebp)
-40007bfb: eb 1e jmp 40007c1b <atol+0xb8>
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-40007bfd: 8b 45 08 mov 0x8(%ebp),%eax
-40007c00: 8a 00 mov (%eax),%al
-40007c02: 84 c0 test %al,%al
-40007c04: 75 a9 jne 40007baf <atol+0x4c>
- // Request vorbereiten
- request.dev = dev;
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
-40007c06: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40007c0a: 75 09 jne 40007c15 <atol+0xb2>
- request.flags.poll = 1;
-40007c0c: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007c13: eb 06 jmp 40007c1b <atol+0xb8>
- request.flags.ata = 0;
- request.flags.lba = 1;
-40007c15: 8b 45 f4 mov -0xc(%ebp),%eax
-40007c18: 89 45 ec mov %eax,-0x14(%ebp)
-40007c1b: 8b 45 ec mov -0x14(%ebp),%eax
-
-40007c1e: c9 leave
-40007c1f: c3 ret
-
-40007c20 <list_create>:
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
-40007c20: 55 push %ebp
-40007c21: 89 e5 mov %esp,%ebp
-40007c23: 83 ec 18 sub $0x18,%esp
- .flags.poll = 1,
-40007c26: 83 ec 0c sub $0xc,%esp
-40007c29: 6a 08 push $0x8
-40007c2b: e8 a8 06 00 00 call 400082d8 <malloc>
-40007c30: 83 c4 10 add $0x10,%esp
-40007c33: 89 45 fc mov %eax,-0x4(%ebp)
- .flags.lba = 0,
-40007c36: 8b 45 fc mov -0x4(%ebp),%eax
-40007c39: c7 00 00 00 00 00 movl $0x0,(%eax)
-
-40007c3f: 8b 45 fc mov -0x4(%ebp),%eax
-40007c42: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40007c49: 8b 45 fc mov -0x4(%ebp),%eax
- .registers.ata.command = IDENTIFY_DEVICE,
-40007c4c: c9 leave
-40007c4d: c3 ret
-
-40007c4e <list_destroy>:
- .block_count = 1,
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
- .error = 0
- };
-40007c4e: 55 push %ebp
-40007c4f: 89 e5 mov %esp,%ebp
-40007c51: 83 ec 08 sub $0x8,%esp
-
- // Request starten
-40007c54: 83 ec 0c sub $0xc,%esp
-40007c57: ff 75 08 pushl 0x8(%ebp)
-40007c5a: e8 dc 00 00 00 call 40007d3b <list_pop>
-40007c5f: 83 c4 10 add $0x10,%esp
-40007c62: 85 c0 test %eax,%eax
-40007c64: 75 ee jne 40007c54 <list_destroy+0x6>
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
-40007c66: 83 ec 0c sub $0xc,%esp
-40007c69: ff 75 08 pushl 0x8(%ebp)
-40007c6c: e8 3e 0d 00 00 call 400089af <free>
-40007c71: 83 c4 10 add $0x10,%esp
- return atapi_drv_identify(dev);
-40007c74: c9 leave
-40007c75: c3 ret
-
-40007c76 <list_is_empty>:
- }
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-40007c76: 55 push %ebp
-40007c77: 89 e5 mov %esp,%ebp
-40007c79: 83 ec 04 sub $0x4,%esp
-
-40007c7c: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007c80: 74 09 je 40007c8b <list_is_empty+0x15>
-40007c82: 8b 45 08 mov 0x8(%ebp),%eax
-40007c85: 8b 00 mov (%eax),%eax
-40007c87: 85 c0 test %eax,%eax
-40007c89: 75 09 jne 40007c94 <list_is_empty+0x1e>
-40007c8b: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%ebp)
-40007c92: eb 07 jmp 40007c9b <list_is_empty+0x25>
-40007c94: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40007c9b: 8b 45 fc mov -0x4(%ebp),%eax
- return 1;
-40007c9e: c9 leave
-40007c9f: c3 ret
-
-40007ca0 <list_size>:
-}
-
-/**
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
-40007ca0: 55 push %ebp
-40007ca1: 89 e5 mov %esp,%ebp
-40007ca3: 83 ec 04 sub $0x4,%esp
- * @param count Anzahl der Sektoren
-40007ca6: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007caa: 74 09 je 40007cb5 <list_size+0x15>
-40007cac: 8b 45 08 mov 0x8(%ebp),%eax
-40007caf: 8b 00 mov (%eax),%eax
-40007cb1: 85 c0 test %eax,%eax
-40007cb3: 75 09 jne 40007cbe <list_size+0x1e>
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-40007cb5: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40007cbc: eb 09 jmp 40007cc7 <list_size+0x27>
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40007cbe: 8b 45 08 mov 0x8(%ebp),%eax
-40007cc1: 8b 40 04 mov 0x4(%eax),%eax
-40007cc4: 89 45 fc mov %eax,-0x4(%ebp)
-40007cc7: 8b 45 fc mov -0x4(%ebp),%eax
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
-40007cca: c9 leave
-40007ccb: c3 ret
-
-40007ccc <list_push>:
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-40007ccc: 55 push %ebp
-40007ccd: 89 e5 mov %esp,%ebp
-40007ccf: 83 ec 18 sub $0x18,%esp
-
-40007cd2: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007cd6: 75 09 jne 40007ce1 <list_push+0x15>
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-40007cd8: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007cdf: eb 55 jmp 40007d36 <list_push+0x6a>
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
-40007ce1: 83 ec 0c sub $0xc,%esp
-40007ce4: 6a 08 push $0x8
-40007ce6: e8 ed 05 00 00 call 400082d8 <malloc>
-40007ceb: 83 c4 10 add $0x10,%esp
-40007cee: 89 45 fc mov %eax,-0x4(%ebp)
- current_count = 256;
-40007cf1: 8b 55 fc mov -0x4(%ebp),%edx
-40007cf4: 8b 45 0c mov 0xc(%ebp),%eax
-40007cf7: 89 42 04 mov %eax,0x4(%edx)
- } else {
-40007cfa: 8b 45 08 mov 0x8(%ebp),%eax
-40007cfd: 8b 10 mov (%eax),%edx
-40007cff: 8b 45 fc mov -0x4(%ebp),%eax
-40007d02: 89 10 mov %edx,(%eax)
- current_count = count_left;
-40007d04: 8b 55 08 mov 0x8(%ebp),%edx
-40007d07: 8b 45 fc mov -0x4(%ebp),%eax
-40007d0a: 89 02 mov %eax,(%edx)
- }
-40007d0c: 8b 45 08 mov 0x8(%ebp),%eax
-40007d0f: 8b 40 04 mov 0x4(%eax),%eax
-40007d12: 8d 50 01 lea 0x1(%eax),%edx
-40007d15: 8b 45 08 mov 0x8(%ebp),%eax
-40007d18: 89 50 04 mov %edx,0x4(%eax)
-
- // Request vorbereiten
-40007d1b: a1 10 a6 00 40 mov 0x4000a610,%eax
-40007d20: 3b 45 08 cmp 0x8(%ebp),%eax
-40007d23: 75 0b jne 40007d30 <list_push+0x64>
- request.dev = dev;
-40007d25: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007d2a: 40 inc %eax
-40007d2b: a3 14 a6 00 40 mov %eax,0x4000a614
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
- request.flags.direction = READ;
-40007d30: 8b 45 08 mov 0x8(%ebp),%eax
-40007d33: 89 45 ec mov %eax,-0x14(%ebp)
-40007d36: 8b 45 ec mov -0x14(%ebp),%eax
- // FIXME
-40007d39: c9 leave
-40007d3a: c3 ret
-
-40007d3b <list_pop>:
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-40007d3b: 55 push %ebp
-40007d3c: 89 e5 mov %esp,%ebp
-40007d3e: 83 ec 18 sub $0x18,%esp
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
- request.blocks_done = 0;
-40007d41: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007d45: 75 09 jne 40007d50 <list_pop+0x15>
- request.buffer = current_buffer;
-40007d47: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007d4e: eb 7e jmp 40007dce <list_pop+0x93>
-
- request.error = NO_ERROR;
-
-40007d50: 8b 45 08 mov 0x8(%ebp),%eax
-40007d53: 8b 00 mov (%eax),%eax
-40007d55: 85 c0 test %eax,%eax
-40007d57: 74 3e je 40007d97 <list_pop+0x5c>
- // TODO: LBA48
-40007d59: 8b 45 08 mov 0x8(%ebp),%eax
-40007d5c: 8b 00 mov (%eax),%eax
-40007d5e: 8b 40 04 mov 0x4(%eax),%eax
-40007d61: 89 45 fc mov %eax,-0x4(%ebp)
- // TODO: CHS
-
-40007d64: 8b 45 08 mov 0x8(%ebp),%eax
-40007d67: 8b 00 mov (%eax),%eax
-40007d69: 89 45 f8 mov %eax,-0x8(%ebp)
- // Request ausfuehren
-40007d6c: 8b 45 08 mov 0x8(%ebp),%eax
-40007d6f: 8b 00 mov (%eax),%eax
-40007d71: 8b 10 mov (%eax),%edx
-40007d73: 8b 45 08 mov 0x8(%ebp),%eax
-40007d76: 89 10 mov %edx,(%eax)
- if (!ata_request(&request)) {
-40007d78: 83 ec 0c sub $0xc,%esp
-40007d7b: ff 75 f8 pushl -0x8(%ebp)
-40007d7e: e8 2c 0c 00 00 call 400089af <free>
-40007d83: 83 c4 10 add $0x10,%esp
- result = 0;
- break;
-40007d86: 8b 45 08 mov 0x8(%ebp),%eax
-40007d89: 8b 40 04 mov 0x4(%eax),%eax
-40007d8c: 8d 50 ff lea -0x1(%eax),%edx
-40007d8f: 8b 45 08 mov 0x8(%ebp),%eax
-40007d92: 89 50 04 mov %edx,0x4(%eax)
-40007d95: eb 07 jmp 40007d9e <list_pop+0x63>
- }
-
-40007d97: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
-40007d9e: a1 10 a6 00 40 mov 0x4000a610,%eax
-40007da3: 3b 45 08 cmp 0x8(%ebp),%eax
-40007da6: 75 20 jne 40007dc8 <list_pop+0x8d>
- lba += current_count;
-40007da8: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007dad: 85 c0 test %eax,%eax
-40007daf: 75 0c jne 40007dbd <list_pop+0x82>
- }
-40007db1: c7 05 10 a6 00 40 00 movl $0x0,0x4000a610
-40007db8: 00 00 00
-40007dbb: eb 0b jmp 40007dc8 <list_pop+0x8d>
-
- return result;
-40007dbd: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007dc2: 48 dec %eax
-40007dc3: a3 14 a6 00 40 mov %eax,0x4000a614
-}
-
-40007dc8: 8b 45 fc mov -0x4(%ebp),%eax
-40007dcb: 89 45 ec mov %eax,-0x14(%ebp)
-40007dce: 8b 45 ec mov -0x14(%ebp),%eax
-40007dd1: c9 leave
-40007dd2: c3 ret
-
-40007dd3 <list_get_node_at>:
-40007dd3: 55 push %ebp
-40007dd4: 89 e5 mov %esp,%ebp
-40007dd6: 83 ec 14 sub $0x14,%esp
-40007dd9: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007ddd: 74 0f je 40007dee <list_get_node_at+0x1b>
-40007ddf: 8b 45 08 mov 0x8(%ebp),%eax
-40007de2: 8b 00 mov (%eax),%eax
-40007de4: 85 c0 test %eax,%eax
-40007de6: 74 06 je 40007dee <list_get_node_at+0x1b>
-40007de8: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40007dec: 79 0c jns 40007dfa <list_get_node_at+0x27>
-40007dee: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007df5: e9 8e 00 00 00 jmp 40007e88 <list_get_node_at+0xb5>
-40007dfa: c7 05 10 a6 00 40 00 movl $0x0,0x4000a610
-40007e01: 00 00 00
-40007e04: 8b 45 08 mov 0x8(%ebp),%eax
-40007e07: 8b 00 mov (%eax),%eax
-40007e09: 89 45 f8 mov %eax,-0x8(%ebp)
-40007e0c: 8b 45 0c mov 0xc(%ebp),%eax
-40007e0f: 89 45 fc mov %eax,-0x4(%ebp)
-40007e12: a1 10 a6 00 40 mov 0x4000a610,%eax
-40007e17: 85 c0 test %eax,%eax
-40007e19: 74 46 je 40007e61 <list_get_node_at+0x8e>
-40007e1b: a1 10 a6 00 40 mov 0x4000a610,%eax
-40007e20: 3b 45 08 cmp 0x8(%ebp),%eax
-40007e23: 75 3c jne 40007e61 <list_get_node_at+0x8e>
-40007e25: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007e2a: 3b 45 0c cmp 0xc(%ebp),%eax
-40007e2d: 7f 32 jg 40007e61 <list_get_node_at+0x8e>
-40007e2f: a1 18 a6 00 40 mov 0x4000a618,%eax
-40007e34: 85 c0 test %eax,%eax
-40007e36: 74 29 je 40007e61 <list_get_node_at+0x8e>
-40007e38: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007e3d: 29 45 fc sub %eax,-0x4(%ebp)
-40007e40: a1 18 a6 00 40 mov 0x4000a618,%eax
-40007e45: 89 45 f8 mov %eax,-0x8(%ebp)
-40007e48: eb 17 jmp 40007e61 <list_get_node_at+0x8e>
-40007e4a: 8b 45 f8 mov -0x8(%ebp),%eax
-40007e4d: 8b 00 mov (%eax),%eax
-40007e4f: 89 45 f8 mov %eax,-0x8(%ebp)
-40007e52: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40007e56: 75 09 jne 40007e61 <list_get_node_at+0x8e>
-40007e58: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007e5f: eb 27 jmp 40007e88 <list_get_node_at+0xb5>
-40007e61: ff 4d fc decl -0x4(%ebp)
-40007e64: 83 7d fc ff cmpl $0xffffffff,-0x4(%ebp)
-40007e68: 75 e0 jne 40007e4a <list_get_node_at+0x77>
-40007e6a: 8b 45 08 mov 0x8(%ebp),%eax
-40007e6d: a3 10 a6 00 40 mov %eax,0x4000a610
-40007e72: 8b 45 0c mov 0xc(%ebp),%eax
-40007e75: a3 14 a6 00 40 mov %eax,0x4000a614
-40007e7a: 8b 45 f8 mov -0x8(%ebp),%eax
-40007e7d: a3 18 a6 00 40 mov %eax,0x4000a618
-40007e82: 8b 45 f8 mov -0x8(%ebp),%eax
-40007e85: 89 45 ec mov %eax,-0x14(%ebp)
-40007e88: 8b 45 ec mov -0x14(%ebp),%eax
-40007e8b: c9 leave
-40007e8c: c3 ret
-
-40007e8d <list_get_element_at>:
-40007e8d: 55 push %ebp
-40007e8e: 89 e5 mov %esp,%ebp
-40007e90: 83 ec 14 sub $0x14,%esp
-40007e93: ff 75 0c pushl 0xc(%ebp)
-40007e96: ff 75 08 pushl 0x8(%ebp)
-40007e99: e8 35 ff ff ff call 40007dd3 <list_get_node_at>
-40007e9e: 83 c4 08 add $0x8,%esp
-40007ea1: 89 45 fc mov %eax,-0x4(%ebp)
-40007ea4: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40007ea8: 74 0b je 40007eb5 <list_get_element_at+0x28>
-40007eaa: 8b 45 fc mov -0x4(%ebp),%eax
-40007ead: 8b 40 04 mov 0x4(%eax),%eax
-40007eb0: 89 45 ec mov %eax,-0x14(%ebp)
-40007eb3: eb 07 jmp 40007ebc <list_get_element_at+0x2f>
-40007eb5: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007ebc: 8b 45 ec mov -0x14(%ebp),%eax
-40007ebf: c9 leave
-40007ec0: c3 ret
-
-40007ec1 <list_insert>:
-40007ec1: 55 push %ebp
-40007ec2: 89 e5 mov %esp,%ebp
-40007ec4: 83 ec 18 sub $0x18,%esp
-40007ec7: 83 ec 0c sub $0xc,%esp
-40007eca: 6a 08 push $0x8
-40007ecc: e8 07 04 00 00 call 400082d8 <malloc>
-40007ed1: 83 c4 10 add $0x10,%esp
-40007ed4: 89 45 f8 mov %eax,-0x8(%ebp)
-40007ed7: 8b 55 f8 mov -0x8(%ebp),%edx
-40007eda: 8b 45 10 mov 0x10(%ebp),%eax
-40007edd: 89 42 04 mov %eax,0x4(%edx)
-40007ee0: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007ee4: 75 0c jne 40007ef2 <list_insert+0x31>
-40007ee6: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007eed: e9 82 00 00 00 jmp 40007f74 <list_insert+0xb3>
-40007ef2: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40007ef6: 74 36 je 40007f2e <list_insert+0x6d>
-40007ef8: 8b 45 0c mov 0xc(%ebp),%eax
-40007efb: 48 dec %eax
-40007efc: 50 push %eax
-40007efd: ff 75 08 pushl 0x8(%ebp)
-40007f00: e8 ce fe ff ff call 40007dd3 <list_get_node_at>
-40007f05: 83 c4 08 add $0x8,%esp
-40007f08: 89 45 fc mov %eax,-0x4(%ebp)
-40007f0b: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40007f0f: 75 09 jne 40007f1a <list_insert+0x59>
-40007f11: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007f18: eb 5a jmp 40007f74 <list_insert+0xb3>
-40007f1a: 8b 45 fc mov -0x4(%ebp),%eax
-40007f1d: 8b 10 mov (%eax),%edx
-40007f1f: 8b 45 f8 mov -0x8(%ebp),%eax
-40007f22: 89 10 mov %edx,(%eax)
-40007f24: 8b 55 fc mov -0x4(%ebp),%edx
-40007f27: 8b 45 f8 mov -0x8(%ebp),%eax
-40007f2a: 89 02 mov %eax,(%edx)
-40007f2c: eb 12 jmp 40007f40 <list_insert+0x7f>
-40007f2e: 8b 45 08 mov 0x8(%ebp),%eax
-40007f31: 8b 10 mov (%eax),%edx
-40007f33: 8b 45 f8 mov -0x8(%ebp),%eax
-40007f36: 89 10 mov %edx,(%eax)
-40007f38: 8b 55 08 mov 0x8(%ebp),%edx
-40007f3b: 8b 45 f8 mov -0x8(%ebp),%eax
-40007f3e: 89 02 mov %eax,(%edx)
-40007f40: 8b 45 08 mov 0x8(%ebp),%eax
-40007f43: 8b 40 04 mov 0x4(%eax),%eax
-40007f46: 8d 50 01 lea 0x1(%eax),%edx
-40007f49: 8b 45 08 mov 0x8(%ebp),%eax
-40007f4c: 89 50 04 mov %edx,0x4(%eax)
-40007f4f: a1 10 a6 00 40 mov 0x4000a610,%eax
-40007f54: 3b 45 08 cmp 0x8(%ebp),%eax
-40007f57: 75 15 jne 40007f6e <list_insert+0xad>
-40007f59: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007f5e: 3b 45 0c cmp 0xc(%ebp),%eax
-40007f61: 7c 0b jl 40007f6e <list_insert+0xad>
-40007f63: a1 14 a6 00 40 mov 0x4000a614,%eax
-40007f68: 40 inc %eax
-40007f69: a3 14 a6 00 40 mov %eax,0x4000a614
-40007f6e: 8b 45 08 mov 0x8(%ebp),%eax
-40007f71: 89 45 ec mov %eax,-0x14(%ebp)
-40007f74: 8b 45 ec mov -0x14(%ebp),%eax
-40007f77: c9 leave
-40007f78: c3 ret
-
-40007f79 <list_remove>:
-40007f79: 55 push %ebp
-40007f7a: 89 e5 mov %esp,%ebp
-40007f7c: 83 ec 18 sub $0x18,%esp
-40007f7f: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40007f83: 75 0c jne 40007f91 <list_remove+0x18>
-40007f85: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007f8c: e9 e4 00 00 00 jmp 40008075 <list_remove+0xfc>
-40007f91: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40007f95: 74 59 je 40007ff0 <list_remove+0x77>
-40007f97: 8b 45 0c mov 0xc(%ebp),%eax
-40007f9a: 48 dec %eax
-40007f9b: 50 push %eax
-40007f9c: ff 75 08 pushl 0x8(%ebp)
-40007f9f: e8 2f fe ff ff call 40007dd3 <list_get_node_at>
-40007fa4: 83 c4 08 add $0x8,%esp
-40007fa7: 89 45 fc mov %eax,-0x4(%ebp)
-40007faa: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40007fae: 74 09 je 40007fb9 <list_remove+0x40>
-40007fb0: 8b 45 fc mov -0x4(%ebp),%eax
-40007fb3: 8b 00 mov (%eax),%eax
-40007fb5: 85 c0 test %eax,%eax
-40007fb7: 75 0c jne 40007fc5 <list_remove+0x4c>
-40007fb9: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40007fc0: e9 b0 00 00 00 jmp 40008075 <list_remove+0xfc>
-40007fc5: 8b 45 fc mov -0x4(%ebp),%eax
-40007fc8: 8b 00 mov (%eax),%eax
-40007fca: 89 45 f8 mov %eax,-0x8(%ebp)
-40007fcd: 8b 45 f8 mov -0x8(%ebp),%eax
-40007fd0: 8b 10 mov (%eax),%edx
-40007fd2: 8b 45 fc mov -0x4(%ebp),%eax
-40007fd5: 89 10 mov %edx,(%eax)
-40007fd7: 8b 45 f8 mov -0x8(%ebp),%eax
-40007fda: 8b 40 04 mov 0x4(%eax),%eax
-40007fdd: 89 45 f4 mov %eax,-0xc(%ebp)
-40007fe0: 83 ec 0c sub $0xc,%esp
-40007fe3: ff 75 f8 pushl -0x8(%ebp)
-40007fe6: e8 c4 09 00 00 call 400089af <free>
-40007feb: 83 c4 10 add $0x10,%esp
-40007fee: eb 3b jmp 4000802b <list_remove+0xb2>
-40007ff0: 8b 45 08 mov 0x8(%ebp),%eax
-40007ff3: 8b 00 mov (%eax),%eax
-40007ff5: 85 c0 test %eax,%eax
-40007ff7: 75 09 jne 40008002 <list_remove+0x89>
-40007ff9: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40008000: eb 73 jmp 40008075 <list_remove+0xfc>
-40008002: 8b 45 08 mov 0x8(%ebp),%eax
-40008005: 8b 00 mov (%eax),%eax
-40008007: 89 45 f8 mov %eax,-0x8(%ebp)
-4000800a: 8b 45 f8 mov -0x8(%ebp),%eax
-4000800d: 8b 10 mov (%eax),%edx
-4000800f: 8b 45 08 mov 0x8(%ebp),%eax
-40008012: 89 10 mov %edx,(%eax)
-40008014: 8b 45 f8 mov -0x8(%ebp),%eax
-40008017: 8b 40 04 mov 0x4(%eax),%eax
-4000801a: 89 45 f4 mov %eax,-0xc(%ebp)
-4000801d: 83 ec 0c sub $0xc,%esp
-40008020: ff 75 f8 pushl -0x8(%ebp)
-40008023: e8 87 09 00 00 call 400089af <free>
-40008028: 83 c4 10 add $0x10,%esp
-4000802b: 8b 45 08 mov 0x8(%ebp),%eax
-4000802e: 8b 40 04 mov 0x4(%eax),%eax
-40008031: 8d 50 ff lea -0x1(%eax),%edx
-40008034: 8b 45 08 mov 0x8(%ebp),%eax
-40008037: 89 50 04 mov %edx,0x4(%eax)
-4000803a: a1 10 a6 00 40 mov 0x4000a610,%eax
-4000803f: 3b 45 08 cmp 0x8(%ebp),%eax
-40008042: 75 2b jne 4000806f <list_remove+0xf6>
-40008044: a1 14 a6 00 40 mov 0x4000a614,%eax
-40008049: 3b 45 0c cmp 0xc(%ebp),%eax
-4000804c: 7e 0d jle 4000805b <list_remove+0xe2>
-4000804e: a1 14 a6 00 40 mov 0x4000a614,%eax
-40008053: 48 dec %eax
-40008054: a3 14 a6 00 40 mov %eax,0x4000a614
-40008059: eb 14 jmp 4000806f <list_remove+0xf6>
-4000805b: a1 14 a6 00 40 mov 0x4000a614,%eax
-40008060: 3b 45 0c cmp 0xc(%ebp),%eax
-40008063: 75 0a jne 4000806f <list_remove+0xf6>
-40008065: c7 05 10 a6 00 40 00 movl $0x0,0x4000a610
-4000806c: 00 00 00
-4000806f: 8b 45 f4 mov -0xc(%ebp),%eax
-40008072: 89 45 ec mov %eax,-0x14(%ebp)
-40008075: 8b 45 ec mov -0x14(%ebp),%eax
-40008078: c9 leave
-40008079: c3 ret
-4000807a: 90 nop
-4000807b: 90 nop
-
-4000807c <liballoc_lock>:
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
-4000807c: 55 push %ebp
-4000807d: 89 e5 mov %esp,%ebp
-4000807f: 83 ec 08 sub $0x8,%esp
- current_count = 256;
- } else {
-40008082: e8 11 b1 ff ff call 40003198 <p>
- current_count = count_left;
-40008087: b8 00 00 00 00 mov $0x0,%eax
- }
-4000808c: c9 leave
-4000808d: c3 ret
-
-4000808e <liballoc_unlock>:
-
- // Request vorbereiten
- request.dev = dev;
-4000808e: 55 push %ebp
-4000808f: 89 e5 mov %esp,%ebp
-40008091: 83 ec 08 sub $0x8,%esp
- // TODO: DMA, UltraDMA...
- request.protocol = PIO;
-40008094: e8 0b b1 ff ff call 400031a4 <v>
- request.flags.direction = READ;
-40008099: b8 00 00 00 00 mov $0x0,%eax
- // FIXME
-4000809e: c9 leave
-4000809f: c3 ret
-
-400080a0 <liballoc_alloc>:
- request.flags.poll = 1;
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
-400080a0: 55 push %ebp
-400080a1: 89 e5 mov %esp,%ebp
-400080a3: 83 ec 18 sub $0x18,%esp
- // Achtung: Beim casten nach uint8_t wird bei 256 Sektoren eine 0.
-400080a6: 8b 45 08 mov 0x8(%ebp),%eax
-400080a9: c1 e0 0c shl $0xc,%eax
-400080ac: 83 ec 08 sub $0x8,%esp
-400080af: 6a 00 push $0x0
-400080b1: 50 push %eax
-400080b2: e8 f4 ac ff ff call 40002dab <mem_allocate>
-400080b7: 83 c4 10 add $0x10,%esp
-400080ba: 89 45 fc mov %eax,-0x4(%ebp)
- // Das macht aber nichts, da in der Spezifikation festgelegt ist,
- // dass 256 Sektoren gelesen werden sollen, wenn im count-Register
- // 0 steht.
- request.registers.ata.count = (uint8_t) current_count;
- request.registers.ata.lba = lba;
-400080bd: 8b 45 08 mov 0x8(%ebp),%eax
-400080c0: c1 e0 0a shl $0xa,%eax
-400080c3: 83 ec 04 sub $0x4,%esp
-400080c6: 50 push %eax
-400080c7: 68 ef be ad de push $0xdeadbeef
-400080cc: ff 75 fc pushl -0x4(%ebp)
-400080cf: e8 56 00 00 00 call 4000812a <liballoc_fill_dword>
-400080d4: 83 c4 10 add $0x10,%esp
-
- request.block_count = current_count;
- request.block_size = ATA_SECTOR_SIZE;
-400080d7: 8b 45 fc mov -0x4(%ebp),%eax
- request.blocks_done = 0;
-400080da: c9 leave
-400080db: c3 ret
-
-400080dc <liballoc_free>:
- request.buffer = current_buffer;
-
- request.error = NO_ERROR;
-400080dc: 55 push %ebp
-400080dd: 89 e5 mov %esp,%ebp
-400080df: 83 ec 08 sub $0x8,%esp
-
-400080e2: 8b 45 0c mov 0xc(%ebp),%eax
-400080e5: c1 e0 0c shl $0xc,%eax
-400080e8: 83 ec 08 sub $0x8,%esp
-400080eb: 50 push %eax
-400080ec: ff 75 08 pushl 0x8(%ebp)
-400080ef: e8 f8 ac ff ff call 40002dec <mem_free>
-400080f4: 83 c4 10 add $0x10,%esp
- // TODO: LBA48
-400080f7: c9 leave
-400080f8: c3 ret
-
-400080f9 <init_memory_manager>:
- // TODO: CHS
-
- // Request ausfuehren
-400080f9: 55 push %ebp
-400080fa: 89 e5 mov %esp,%ebp
- if (!ata_request(&request)) {
- result = 0;
-400080fc: c9 leave
-400080fd: c3 ret
-
-400080fe <liballoc_memset>:
- break;
- }
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
-400080fe: 55 push %ebp
-400080ff: 89 e5 mov %esp,%ebp
-40008101: 83 ec 10 sub $0x10,%esp
- lba += current_count;
- }
-40008104: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-4000810b: eb 10 jmp 4000811d <liballoc_memset+0x1f>
-
-4000810d: 8b 55 08 mov 0x8(%ebp),%edx
-40008110: 8b 45 fc mov -0x4(%ebp),%eax
-40008113: 01 c2 add %eax,%edx
-40008115: 8b 45 0c mov 0xc(%ebp),%eax
-40008118: 88 02 mov %al,(%edx)
-
- // Pufferpointer und Anzahl der uebrigen Blocks anpassen
- current_buffer += current_count * ATA_SECTOR_SIZE;
- count_left -= current_count;
- lba += current_count;
- }
-4000811a: ff 45 fc incl -0x4(%ebp)
-4000811d: 8b 45 fc mov -0x4(%ebp),%eax
-40008120: 3b 45 10 cmp 0x10(%ebp),%eax
-40008123: 72 e8 jb 4000810d <liballoc_memset+0xf>
-
- return result;
-}
-40008125: 8b 45 08 mov 0x8(%ebp),%eax
-
-40008128: c9 leave
-40008129: c3 ret
-
-4000812a <liballoc_fill_dword>:
-4000812a: 55 push %ebp
-4000812b: 89 e5 mov %esp,%ebp
-4000812d: 83 ec 10 sub $0x10,%esp
-40008130: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40008137: eb 15 jmp 4000814e <liballoc_fill_dword+0x24>
-40008139: 8b 45 fc mov -0x4(%ebp),%eax
-4000813c: c1 e0 02 shl $0x2,%eax
-4000813f: 89 c2 mov %eax,%edx
-40008141: 8b 45 08 mov 0x8(%ebp),%eax
-40008144: 01 c2 add %eax,%edx
-40008146: 8b 45 0c mov 0xc(%ebp),%eax
-40008149: 89 02 mov %eax,(%edx)
-
-4000814b: ff 45 fc incl -0x4(%ebp)
-4000814e: 8b 45 fc mov -0x4(%ebp),%eax
-40008151: 3b 45 10 cmp 0x10(%ebp),%eax
-40008154: 72 e3 jb 40008139 <liballoc_fill_dword+0xf>
-40008156: 8b 45 08 mov 0x8(%ebp),%eax
-40008159: c9 leave
-4000815a: c3 ret
-
-4000815b <liballoc_memcpy>:
-4000815b: 55 push %ebp
-4000815c: 89 e5 mov %esp,%ebp
-4000815e: 83 ec 10 sub $0x10,%esp
-40008161: 8b 45 08 mov 0x8(%ebp),%eax
-40008164: 89 45 f8 mov %eax,-0x8(%ebp)
-40008167: 8b 45 0c mov 0xc(%ebp),%eax
-4000816a: 89 45 fc mov %eax,-0x4(%ebp)
-4000816d: eb 16 jmp 40008185 <liballoc_memcpy+0x2a>
-4000816f: 8b 45 fc mov -0x4(%ebp),%eax
-40008172: 8b 10 mov (%eax),%edx
-40008174: 8b 45 f8 mov -0x8(%ebp),%eax
-40008177: 89 10 mov %edx,(%eax)
-40008179: 83 45 f8 04 addl $0x4,-0x8(%ebp)
-4000817d: 83 45 fc 04 addl $0x4,-0x4(%ebp)
-40008181: 83 6d 10 04 subl $0x4,0x10(%ebp)
-40008185: 83 7d 10 03 cmpl $0x3,0x10(%ebp)
-40008189: 77 e4 ja 4000816f <liballoc_memcpy+0x14>
-4000818b: 8b 45 f8 mov -0x8(%ebp),%eax
-4000818e: 89 45 f0 mov %eax,-0x10(%ebp)
-40008191: 8b 45 fc mov -0x4(%ebp),%eax
-40008194: 89 45 f4 mov %eax,-0xc(%ebp)
-40008197: eb 13 jmp 400081ac <liballoc_memcpy+0x51>
-40008199: 8b 45 f4 mov -0xc(%ebp),%eax
-4000819c: 8a 10 mov (%eax),%dl
-4000819e: 8b 45 f0 mov -0x10(%ebp),%eax
-400081a1: 88 10 mov %dl,(%eax)
-400081a3: ff 45 f0 incl -0x10(%ebp)
-400081a6: ff 45 f4 incl -0xc(%ebp)
-400081a9: ff 4d 10 decl 0x10(%ebp)
-400081ac: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-400081b0: 75 e7 jne 40008199 <liballoc_memcpy+0x3e>
-400081b2: 8b 45 08 mov 0x8(%ebp),%eax
-400081b5: c9 leave
-400081b6: c3 ret
-
-400081b7 <allocate_new_page>:
-400081b7: 55 push %ebp
-400081b8: 89 e5 mov %esp,%ebp
-400081ba: 53 push %ebx
-400081bb: 83 ec 14 sub $0x14,%esp
-400081be: 8b 45 08 mov 0x8(%ebp),%eax
-400081c1: 83 c0 18 add $0x18,%eax
-400081c4: 89 45 f4 mov %eax,-0xc(%ebp)
-400081c7: 83 45 f4 18 addl $0x18,-0xc(%ebp)
-400081cb: a1 54 a0 00 40 mov 0x4000a054,%eax
-400081d0: 89 c2 mov %eax,%edx
-400081d2: 8b 45 f4 mov -0xc(%ebp),%eax
-400081d5: 89 d1 mov %edx,%ecx
-400081d7: ba 00 00 00 00 mov $0x0,%edx
-400081dc: f7 f1 div %ecx
-400081de: 89 d0 mov %edx,%eax
-400081e0: 85 c0 test %eax,%eax
-400081e2: 75 18 jne 400081fc <allocate_new_page+0x45>
-400081e4: a1 54 a0 00 40 mov 0x4000a054,%eax
-400081e9: 89 c2 mov %eax,%edx
-400081eb: 8b 45 f4 mov -0xc(%ebp),%eax
-400081ee: 89 d1 mov %edx,%ecx
-400081f0: ba 00 00 00 00 mov $0x0,%edx
-400081f5: f7 f1 div %ecx
-400081f7: 89 45 f4 mov %eax,-0xc(%ebp)
-400081fa: eb 17 jmp 40008213 <allocate_new_page+0x5c>
-400081fc: a1 54 a0 00 40 mov 0x4000a054,%eax
-40008201: 89 c2 mov %eax,%edx
-40008203: 8b 45 f4 mov -0xc(%ebp),%eax
-40008206: 89 d1 mov %edx,%ecx
-40008208: ba 00 00 00 00 mov $0x0,%edx
-4000820d: f7 f1 div %ecx
-4000820f: 40 inc %eax
-40008210: 89 45 f4 mov %eax,-0xc(%ebp)
-40008213: a1 58 a0 00 40 mov 0x4000a058,%eax
-40008218: 3b 45 f4 cmp -0xc(%ebp),%eax
-4000821b: 76 08 jbe 40008225 <allocate_new_page+0x6e>
-4000821d: a1 58 a0 00 40 mov 0x4000a058,%eax
-40008222: 89 45 f4 mov %eax,-0xc(%ebp)
-40008225: 8b 45 f4 mov -0xc(%ebp),%eax
-40008228: 83 ec 0c sub $0xc,%esp
-4000822b: 50 push %eax
-4000822c: e8 6f fe ff ff call 400080a0 <liballoc_alloc>
-40008231: 83 c4 10 add $0x10,%esp
-40008234: 89 45 f8 mov %eax,-0x8(%ebp)
-40008237: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-4000823b: 75 25 jne 40008262 <allocate_new_page+0xab>
-4000823d: a1 38 a6 00 40 mov 0x4000a638,%eax
-40008242: 8b 15 3c a6 00 40 mov 0x4000a63c,%edx
-40008248: 83 c0 01 add $0x1,%eax
-4000824b: 83 d2 00 adc $0x0,%edx
-4000824e: a3 38 a6 00 40 mov %eax,0x4000a638
-40008253: 89 15 3c a6 00 40 mov %edx,0x4000a63c
-40008259: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40008260: eb 6e jmp 400082d0 <allocate_new_page+0x119>
-40008262: 8b 45 f8 mov -0x8(%ebp),%eax
-40008265: c7 00 00 00 00 00 movl $0x0,(%eax)
-4000826b: 8b 45 f8 mov -0x8(%ebp),%eax
-4000826e: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
-40008275: 8b 55 f8 mov -0x8(%ebp),%edx
-40008278: 8b 45 f4 mov -0xc(%ebp),%eax
-4000827b: 89 42 08 mov %eax,0x8(%edx)
-4000827e: a1 54 a0 00 40 mov 0x4000a054,%eax
-40008283: 89 c2 mov %eax,%edx
-40008285: 0f af 55 f4 imul -0xc(%ebp),%edx
-40008289: 8b 45 f8 mov -0x8(%ebp),%eax
-4000828c: 89 50 0c mov %edx,0xc(%eax)
-4000828f: 8b 45 f8 mov -0x8(%ebp),%eax
-40008292: c7 40 10 18 00 00 00 movl $0x18,0x10(%eax)
-40008299: 8b 45 f8 mov -0x8(%ebp),%eax
-4000829c: c7 40 14 00 00 00 00 movl $0x0,0x14(%eax)
-400082a3: 8b 45 f8 mov -0x8(%ebp),%eax
-400082a6: 8b 40 0c mov 0xc(%eax),%eax
-400082a9: 89 c1 mov %eax,%ecx
-400082ab: bb 00 00 00 00 mov $0x0,%ebx
-400082b0: a1 28 a6 00 40 mov 0x4000a628,%eax
-400082b5: 8b 15 2c a6 00 40 mov 0x4000a62c,%edx
-400082bb: 01 c8 add %ecx,%eax
-400082bd: 11 da adc %ebx,%edx
-400082bf: a3 28 a6 00 40 mov %eax,0x4000a628
-400082c4: 89 15 2c a6 00 40 mov %edx,0x4000a62c
-400082ca: 8b 45 f8 mov -0x8(%ebp),%eax
-400082cd: 89 45 e8 mov %eax,-0x18(%ebp)
-400082d0: 8b 45 e8 mov -0x18(%ebp),%eax
-400082d3: 8b 5d fc mov -0x4(%ebp),%ebx
-400082d6: c9 leave
-400082d7: c3 ret
-
-400082d8 <malloc>:
-400082d8: 55 push %ebp
-400082d9: 89 e5 mov %esp,%ebp
-400082db: 53 push %ebx
-400082dc: 83 ec 64 sub $0x64,%esp
-400082df: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
-400082e6: c7 45 c8 00 00 00 00 movl $0x0,-0x38(%ebp)
-400082ed: c7 45 cc 00 00 00 00 movl $0x0,-0x34(%ebp)
-400082f4: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
-400082fb: 8b 45 08 mov 0x8(%ebp),%eax
-400082fe: 89 45 e4 mov %eax,-0x1c(%ebp)
-40008301: 83 45 e4 06 addl $0x6,-0x1c(%ebp)
-40008305: e8 72 fd ff ff call 4000807c <liballoc_lock>
-4000830a: 83 7d e4 00 cmpl $0x0,-0x1c(%ebp)
-4000830e: 75 36 jne 40008346 <malloc+0x6e>
-40008310: a1 38 a6 00 40 mov 0x4000a638,%eax
-40008315: 8b 15 3c a6 00 40 mov 0x4000a63c,%edx
-4000831b: 83 c0 01 add $0x1,%eax
-4000831e: 83 d2 00 adc $0x0,%edx
-40008321: a3 38 a6 00 40 mov %eax,0x4000a638
-40008326: 89 15 3c a6 00 40 mov %edx,0x4000a63c
-4000832c: e8 5d fd ff ff call 4000808e <liballoc_unlock>
-40008331: 83 ec 0c sub $0xc,%esp
-40008334: 6a 01 push $0x1
-40008336: e8 9d ff ff ff call 400082d8 <malloc>
-4000833b: 83 c4 10 add $0x10,%esp
-4000833e: 89 45 a4 mov %eax,-0x5c(%ebp)
-40008341: e9 61 06 00 00 jmp 400089a7 <malloc+0x6cf>
-40008346: a1 20 a6 00 40 mov 0x4000a620,%eax
-4000834b: 85 c0 test %eax,%eax
-4000834d: 75 2d jne 4000837c <malloc+0xa4>
-4000834f: 83 ec 0c sub $0xc,%esp
-40008352: ff 75 e4 pushl -0x1c(%ebp)
-40008355: e8 5d fe ff ff call 400081b7 <allocate_new_page>
-4000835a: 83 c4 10 add $0x10,%esp
-4000835d: a3 20 a6 00 40 mov %eax,0x4000a620
-40008362: a1 20 a6 00 40 mov 0x4000a620,%eax
-40008367: 85 c0 test %eax,%eax
-40008369: 75 11 jne 4000837c <malloc+0xa4>
-4000836b: e8 1e fd ff ff call 4000808e <liballoc_unlock>
-40008370: c7 45 a4 00 00 00 00 movl $0x0,-0x5c(%ebp)
-40008377: e9 2b 06 00 00 jmp 400089a7 <malloc+0x6cf>
-4000837c: a1 20 a6 00 40 mov 0x4000a620,%eax
-40008381: 89 45 d8 mov %eax,-0x28(%ebp)
-40008384: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
-4000838b: a1 24 a6 00 40 mov 0x4000a624,%eax
-40008390: 85 c0 test %eax,%eax
-40008392: 0f 84 f9 05 00 00 je 40008991 <malloc+0x6b9>
-40008398: a1 24 a6 00 40 mov 0x4000a624,%eax
-4000839d: 8b 50 0c mov 0xc(%eax),%edx
-400083a0: a1 24 a6 00 40 mov 0x4000a624,%eax
-400083a5: 8b 40 10 mov 0x10(%eax),%eax
-400083a8: 89 d1 mov %edx,%ecx
-400083aa: 29 c1 sub %eax,%ecx
-400083ac: 89 c8 mov %ecx,%eax
-400083ae: ba 00 00 00 00 mov $0x0,%edx
-400083b3: 89 45 c8 mov %eax,-0x38(%ebp)
-400083b6: 89 55 cc mov %edx,-0x34(%ebp)
-400083b9: 8b 45 e4 mov -0x1c(%ebp),%eax
-400083bc: 83 c0 18 add $0x18,%eax
-400083bf: 89 45 a8 mov %eax,-0x58(%ebp)
-400083c2: c7 45 ac 00 00 00 00 movl $0x0,-0x54(%ebp)
-400083c9: 8b 45 ac mov -0x54(%ebp),%eax
-400083cc: 3b 45 cc cmp -0x34(%ebp),%eax
-400083cf: 0f 87 bc 05 00 00 ja 40008991 <malloc+0x6b9>
-400083d5: 8b 55 ac mov -0x54(%ebp),%edx
-400083d8: 3b 55 cc cmp -0x34(%ebp),%edx
-400083db: 72 0c jb 400083e9 <malloc+0x111>
-400083dd: 8b 4d a8 mov -0x58(%ebp),%ecx
-400083e0: 3b 4d c8 cmp -0x38(%ebp),%ecx
-400083e3: 0f 83 a8 05 00 00 jae 40008991 <malloc+0x6b9>
-400083e9: a1 24 a6 00 40 mov 0x4000a624,%eax
-400083ee: 89 45 d8 mov %eax,-0x28(%ebp)
-400083f1: c7 45 c4 01 00 00 00 movl $0x1,-0x3c(%ebp)
-400083f8: e9 94 05 00 00 jmp 40008991 <malloc+0x6b9>
-400083fd: 8b 45 d8 mov -0x28(%ebp),%eax
-40008400: 8b 50 0c mov 0xc(%eax),%edx
-40008403: 8b 45 d8 mov -0x28(%ebp),%eax
-40008406: 8b 40 10 mov 0x10(%eax),%eax
-40008409: 89 d1 mov %edx,%ecx
-4000840b: 29 c1 sub %eax,%ecx
-4000840d: 89 c8 mov %ecx,%eax
-4000840f: 89 45 d4 mov %eax,-0x2c(%ebp)
-40008412: 8b 45 d4 mov -0x2c(%ebp),%eax
-40008415: ba 00 00 00 00 mov $0x0,%edx
-4000841a: 89 45 b0 mov %eax,-0x50(%ebp)
-4000841d: 89 55 b4 mov %edx,-0x4c(%ebp)
-40008420: 8b 55 b4 mov -0x4c(%ebp),%edx
-40008423: 3b 55 cc cmp -0x34(%ebp),%edx
-40008426: 72 26 jb 4000844e <malloc+0x176>
-40008428: 8b 4d b4 mov -0x4c(%ebp),%ecx
-4000842b: 3b 4d cc cmp -0x34(%ebp),%ecx
-4000842e: 77 08 ja 40008438 <malloc+0x160>
-40008430: 8b 45 b0 mov -0x50(%ebp),%eax
-40008433: 3b 45 c8 cmp -0x38(%ebp),%eax
-40008436: 76 16 jbe 4000844e <malloc+0x176>
-40008438: 8b 45 d8 mov -0x28(%ebp),%eax
-4000843b: a3 24 a6 00 40 mov %eax,0x4000a624
-40008440: 8b 45 d4 mov -0x2c(%ebp),%eax
-40008443: ba 00 00 00 00 mov $0x0,%edx
-40008448: 89 45 c8 mov %eax,-0x38(%ebp)
-4000844b: 89 55 cc mov %edx,-0x34(%ebp)
-4000844e: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008451: 83 c0 18 add $0x18,%eax
-40008454: 3b 45 d4 cmp -0x2c(%ebp),%eax
-40008457: 76 6a jbe 400084c3 <malloc+0x1eb>
-40008459: 8b 45 d8 mov -0x28(%ebp),%eax
-4000845c: 8b 40 04 mov 0x4(%eax),%eax
-4000845f: 85 c0 test %eax,%eax
-40008461: 74 0e je 40008471 <malloc+0x199>
-40008463: 8b 45 d8 mov -0x28(%ebp),%eax
-40008466: 8b 40 04 mov 0x4(%eax),%eax
-40008469: 89 45 d8 mov %eax,-0x28(%ebp)
-4000846c: e9 20 05 00 00 jmp 40008991 <malloc+0x6b9>
-40008471: 83 7d c4 01 cmpl $0x1,-0x3c(%ebp)
-40008475: 75 14 jne 4000848b <malloc+0x1b3>
-40008477: a1 20 a6 00 40 mov 0x4000a620,%eax
-4000847c: 89 45 d8 mov %eax,-0x28(%ebp)
-4000847f: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
-40008486: e9 06 05 00 00 jmp 40008991 <malloc+0x6b9>
-4000848b: 83 ec 0c sub $0xc,%esp
-4000848e: ff 75 e4 pushl -0x1c(%ebp)
-40008491: e8 21 fd ff ff call 400081b7 <allocate_new_page>
-40008496: 83 c4 10 add $0x10,%esp
-40008499: 89 c2 mov %eax,%edx
-4000849b: 8b 45 d8 mov -0x28(%ebp),%eax
-4000849e: 89 50 04 mov %edx,0x4(%eax)
-400084a1: 8b 45 d8 mov -0x28(%ebp),%eax
-400084a4: 8b 40 04 mov 0x4(%eax),%eax
-400084a7: 85 c0 test %eax,%eax
-400084a9: 0f 84 ec 04 00 00 je 4000899b <malloc+0x6c3>
-400084af: 8b 45 d8 mov -0x28(%ebp),%eax
-400084b2: 8b 50 04 mov 0x4(%eax),%edx
-400084b5: 8b 45 d8 mov -0x28(%ebp),%eax
-400084b8: 89 02 mov %eax,(%edx)
-400084ba: 8b 45 d8 mov -0x28(%ebp),%eax
-400084bd: 8b 40 04 mov 0x4(%eax),%eax
-400084c0: 89 45 d8 mov %eax,-0x28(%ebp)
-400084c3: 8b 45 d8 mov -0x28(%ebp),%eax
-400084c6: 8b 40 14 mov 0x14(%eax),%eax
-400084c9: 85 c0 test %eax,%eax
-400084cb: 0f 85 e5 00 00 00 jne 400085b6 <malloc+0x2de>
-400084d1: 8b 45 d8 mov -0x28(%ebp),%eax
-400084d4: 83 c0 18 add $0x18,%eax
-400084d7: 89 c2 mov %eax,%edx
-400084d9: 8b 45 d8 mov -0x28(%ebp),%eax
-400084dc: 89 50 14 mov %edx,0x14(%eax)
-400084df: 8b 45 d8 mov -0x28(%ebp),%eax
-400084e2: 8b 40 14 mov 0x14(%eax),%eax
-400084e5: c7 40 0c de c0 01 c0 movl $0xc001c0de,0xc(%eax)
-400084ec: 8b 45 d8 mov -0x28(%ebp),%eax
-400084ef: 8b 40 14 mov 0x14(%eax),%eax
-400084f2: c7 00 00 00 00 00 movl $0x0,(%eax)
-400084f8: 8b 45 d8 mov -0x28(%ebp),%eax
-400084fb: 8b 40 14 mov 0x14(%eax),%eax
-400084fe: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
-40008505: 8b 45 d8 mov -0x28(%ebp),%eax
-40008508: 8b 50 14 mov 0x14(%eax),%edx
-4000850b: 8b 45 d8 mov -0x28(%ebp),%eax
-4000850e: 89 42 08 mov %eax,0x8(%edx)
-40008511: 8b 45 d8 mov -0x28(%ebp),%eax
-40008514: 8b 50 14 mov 0x14(%eax),%edx
-40008517: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000851a: 89 42 10 mov %eax,0x10(%edx)
-4000851d: 8b 45 d8 mov -0x28(%ebp),%eax
-40008520: 8b 50 14 mov 0x14(%eax),%edx
-40008523: 8b 45 08 mov 0x8(%ebp),%eax
-40008526: 89 42 14 mov %eax,0x14(%edx)
-40008529: 8b 45 d8 mov -0x28(%ebp),%eax
-4000852c: 8b 40 10 mov 0x10(%eax),%eax
-4000852f: 03 45 e4 add -0x1c(%ebp),%eax
-40008532: 8d 50 18 lea 0x18(%eax),%edx
-40008535: 8b 45 d8 mov -0x28(%ebp),%eax
-40008538: 89 50 10 mov %edx,0x10(%eax)
-4000853b: 8b 4d e4 mov -0x1c(%ebp),%ecx
-4000853e: bb 00 00 00 00 mov $0x0,%ebx
-40008543: a1 30 a6 00 40 mov 0x4000a630,%eax
-40008548: 8b 15 34 a6 00 40 mov 0x4000a634,%edx
-4000854e: 01 c8 add %ecx,%eax
-40008550: 11 da adc %ebx,%edx
-40008552: a3 30 a6 00 40 mov %eax,0x4000a630
-40008557: 89 15 34 a6 00 40 mov %edx,0x4000a634
-4000855d: 8b 45 d8 mov -0x28(%ebp),%eax
-40008560: 8b 40 14 mov 0x14(%eax),%eax
-40008563: 83 c0 18 add $0x18,%eax
-40008566: 89 45 d0 mov %eax,-0x30(%ebp)
-40008569: 8b 45 d0 mov -0x30(%ebp),%eax
-4000856c: 83 c0 02 add $0x2,%eax
-4000856f: 89 45 d0 mov %eax,-0x30(%ebp)
-40008572: 8b 45 d0 mov -0x30(%ebp),%eax
-40008575: 83 e0 03 and $0x3,%eax
-40008578: 89 45 e8 mov %eax,-0x18(%ebp)
-4000857b: 83 7d e8 00 cmpl $0x0,-0x18(%ebp)
-4000857f: 74 14 je 40008595 <malloc+0x2bd>
-40008581: b8 04 00 00 00 mov $0x4,%eax
-40008586: 2b 45 e8 sub -0x18(%ebp),%eax
-40008589: 89 45 e8 mov %eax,-0x18(%ebp)
-4000858c: 8b 45 d0 mov -0x30(%ebp),%eax
-4000858f: 03 45 e8 add -0x18(%ebp),%eax
-40008592: 89 45 d0 mov %eax,-0x30(%ebp)
-40008595: 8b 45 d0 mov -0x30(%ebp),%eax
-40008598: 83 e8 02 sub $0x2,%eax
-4000859b: 89 c2 mov %eax,%edx
-4000859d: 8b 45 e8 mov -0x18(%ebp),%eax
-400085a0: 83 c0 02 add $0x2,%eax
-400085a3: 66 89 02 mov %ax,(%edx)
-400085a6: e8 e3 fa ff ff call 4000808e <liballoc_unlock>
-400085ab: 8b 55 d0 mov -0x30(%ebp),%edx
-400085ae: 89 55 a4 mov %edx,-0x5c(%ebp)
-400085b1: e9 f1 03 00 00 jmp 400089a7 <malloc+0x6cf>
-400085b6: 8b 45 d8 mov -0x28(%ebp),%eax
-400085b9: 8b 40 14 mov 0x14(%eax),%eax
-400085bc: 89 c2 mov %eax,%edx
-400085be: 8b 45 d8 mov -0x28(%ebp),%eax
-400085c1: 89 d1 mov %edx,%ecx
-400085c3: 29 c1 sub %eax,%ecx
-400085c5: 89 c8 mov %ecx,%eax
-400085c7: 83 e8 18 sub $0x18,%eax
-400085ca: 89 45 d4 mov %eax,-0x2c(%ebp)
-400085cd: 8b 45 e4 mov -0x1c(%ebp),%eax
-400085d0: 83 c0 18 add $0x18,%eax
-400085d3: 3b 45 d4 cmp -0x2c(%ebp),%eax
-400085d6: 0f 87 f7 00 00 00 ja 400086d3 <malloc+0x3fb>
-400085dc: 8b 45 d8 mov -0x28(%ebp),%eax
-400085df: 8b 50 14 mov 0x14(%eax),%edx
-400085e2: 8b 45 d8 mov -0x28(%ebp),%eax
-400085e5: 83 c0 18 add $0x18,%eax
-400085e8: 89 02 mov %eax,(%edx)
-400085ea: 8b 45 d8 mov -0x28(%ebp),%eax
-400085ed: 8b 40 14 mov 0x14(%eax),%eax
-400085f0: 8b 10 mov (%eax),%edx
-400085f2: 8b 45 d8 mov -0x28(%ebp),%eax
-400085f5: 8b 40 14 mov 0x14(%eax),%eax
-400085f8: 89 42 04 mov %eax,0x4(%edx)
-400085fb: 8b 45 d8 mov -0x28(%ebp),%eax
-400085fe: 8b 40 14 mov 0x14(%eax),%eax
-40008601: 8b 10 mov (%eax),%edx
-40008603: 8b 45 d8 mov -0x28(%ebp),%eax
-40008606: 89 50 14 mov %edx,0x14(%eax)
-40008609: 8b 45 d8 mov -0x28(%ebp),%eax
-4000860c: 8b 40 14 mov 0x14(%eax),%eax
-4000860f: c7 40 0c de c0 01 c0 movl $0xc001c0de,0xc(%eax)
-40008616: 8b 45 d8 mov -0x28(%ebp),%eax
-40008619: 8b 40 14 mov 0x14(%eax),%eax
-4000861c: c7 00 00 00 00 00 movl $0x0,(%eax)
-40008622: 8b 45 d8 mov -0x28(%ebp),%eax
-40008625: 8b 50 14 mov 0x14(%eax),%edx
-40008628: 8b 45 d8 mov -0x28(%ebp),%eax
-4000862b: 89 42 08 mov %eax,0x8(%edx)
-4000862e: 8b 45 d8 mov -0x28(%ebp),%eax
-40008631: 8b 50 14 mov 0x14(%eax),%edx
-40008634: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008637: 89 42 10 mov %eax,0x10(%edx)
-4000863a: 8b 45 d8 mov -0x28(%ebp),%eax
-4000863d: 8b 50 14 mov 0x14(%eax),%edx
-40008640: 8b 45 08 mov 0x8(%ebp),%eax
-40008643: 89 42 14 mov %eax,0x14(%edx)
-40008646: 8b 45 d8 mov -0x28(%ebp),%eax
-40008649: 8b 40 10 mov 0x10(%eax),%eax
-4000864c: 03 45 e4 add -0x1c(%ebp),%eax
-4000864f: 8d 50 18 lea 0x18(%eax),%edx
-40008652: 8b 45 d8 mov -0x28(%ebp),%eax
-40008655: 89 50 10 mov %edx,0x10(%eax)
-40008658: 8b 4d e4 mov -0x1c(%ebp),%ecx
-4000865b: bb 00 00 00 00 mov $0x0,%ebx
-40008660: a1 30 a6 00 40 mov 0x4000a630,%eax
-40008665: 8b 15 34 a6 00 40 mov 0x4000a634,%edx
-4000866b: 01 c8 add %ecx,%eax
-4000866d: 11 da adc %ebx,%edx
-4000866f: a3 30 a6 00 40 mov %eax,0x4000a630
-40008674: 89 15 34 a6 00 40 mov %edx,0x4000a634
-4000867a: 8b 45 d8 mov -0x28(%ebp),%eax
-4000867d: 8b 40 14 mov 0x14(%eax),%eax
-40008680: 83 c0 18 add $0x18,%eax
-40008683: 89 45 d0 mov %eax,-0x30(%ebp)
-40008686: 8b 45 d0 mov -0x30(%ebp),%eax
-40008689: 83 c0 02 add $0x2,%eax
-4000868c: 89 45 d0 mov %eax,-0x30(%ebp)
-4000868f: 8b 45 d0 mov -0x30(%ebp),%eax
-40008692: 83 e0 03 and $0x3,%eax
-40008695: 89 45 ec mov %eax,-0x14(%ebp)
-40008698: 83 7d ec 00 cmpl $0x0,-0x14(%ebp)
-4000869c: 74 14 je 400086b2 <malloc+0x3da>
-4000869e: b8 04 00 00 00 mov $0x4,%eax
-400086a3: 2b 45 ec sub -0x14(%ebp),%eax
-400086a6: 89 45 ec mov %eax,-0x14(%ebp)
-400086a9: 8b 45 d0 mov -0x30(%ebp),%eax
-400086ac: 03 45 ec add -0x14(%ebp),%eax
-400086af: 89 45 d0 mov %eax,-0x30(%ebp)
-400086b2: 8b 45 d0 mov -0x30(%ebp),%eax
-400086b5: 83 e8 02 sub $0x2,%eax
-400086b8: 89 c2 mov %eax,%edx
-400086ba: 8b 45 ec mov -0x14(%ebp),%eax
-400086bd: 83 c0 02 add $0x2,%eax
-400086c0: 66 89 02 mov %ax,(%edx)
-400086c3: e8 c6 f9 ff ff call 4000808e <liballoc_unlock>
-400086c8: 8b 45 d0 mov -0x30(%ebp),%eax
-400086cb: 89 45 a4 mov %eax,-0x5c(%ebp)
-400086ce: e9 d4 02 00 00 jmp 400089a7 <malloc+0x6cf>
-400086d3: 8b 45 d8 mov -0x28(%ebp),%eax
-400086d6: 8b 40 14 mov 0x14(%eax),%eax
-400086d9: 89 45 dc mov %eax,-0x24(%ebp)
-400086dc: e9 51 02 00 00 jmp 40008932 <malloc+0x65a>
-400086e1: 8b 45 dc mov -0x24(%ebp),%eax
-400086e4: 8b 40 04 mov 0x4(%eax),%eax
-400086e7: 85 c0 test %eax,%eax
-400086e9: 0f 85 18 01 00 00 jne 40008807 <malloc+0x52f>
-400086ef: 8b 45 d8 mov -0x28(%ebp),%eax
-400086f2: 8b 50 0c mov 0xc(%eax),%edx
-400086f5: 8b 45 d8 mov -0x28(%ebp),%eax
-400086f8: 8d 04 02 lea (%edx,%eax,1),%eax
-400086fb: 89 45 d4 mov %eax,-0x2c(%ebp)
-400086fe: 8b 45 dc mov -0x24(%ebp),%eax
-40008701: 8b 50 10 mov 0x10(%eax),%edx
-40008704: 8b 45 dc mov -0x24(%ebp),%eax
-40008707: 01 c2 add %eax,%edx
-40008709: 8b 45 d4 mov -0x2c(%ebp),%eax
-4000870c: 29 d0 sub %edx,%eax
-4000870e: 83 e8 18 sub $0x18,%eax
-40008711: 89 45 d4 mov %eax,-0x2c(%ebp)
-40008714: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008717: 83 c0 18 add $0x18,%eax
-4000871a: 3b 45 d4 cmp -0x2c(%ebp),%eax
-4000871d: 0f 87 e4 00 00 00 ja 40008807 <malloc+0x52f>
-40008723: 8b 45 dc mov -0x24(%ebp),%eax
-40008726: 8b 50 10 mov 0x10(%eax),%edx
-40008729: 8b 45 dc mov -0x24(%ebp),%eax
-4000872c: 8d 04 02 lea (%edx,%eax,1),%eax
-4000872f: 83 c0 18 add $0x18,%eax
-40008732: 89 c2 mov %eax,%edx
-40008734: 8b 45 dc mov -0x24(%ebp),%eax
-40008737: 89 50 04 mov %edx,0x4(%eax)
-4000873a: 8b 45 dc mov -0x24(%ebp),%eax
-4000873d: 8b 50 04 mov 0x4(%eax),%edx
-40008740: 8b 45 dc mov -0x24(%ebp),%eax
-40008743: 89 02 mov %eax,(%edx)
-40008745: 8b 45 dc mov -0x24(%ebp),%eax
-40008748: 8b 40 04 mov 0x4(%eax),%eax
-4000874b: 89 45 dc mov %eax,-0x24(%ebp)
-4000874e: 8b 45 dc mov -0x24(%ebp),%eax
-40008751: c7 40 04 00 00 00 00 movl $0x0,0x4(%eax)
-40008758: 8b 45 dc mov -0x24(%ebp),%eax
-4000875b: c7 40 0c de c0 01 c0 movl $0xc001c0de,0xc(%eax)
-40008762: 8b 55 dc mov -0x24(%ebp),%edx
-40008765: 8b 45 d8 mov -0x28(%ebp),%eax
-40008768: 89 42 08 mov %eax,0x8(%edx)
-4000876b: 8b 55 dc mov -0x24(%ebp),%edx
-4000876e: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008771: 89 42 10 mov %eax,0x10(%edx)
-40008774: 8b 55 dc mov -0x24(%ebp),%edx
-40008777: 8b 45 08 mov 0x8(%ebp),%eax
-4000877a: 89 42 14 mov %eax,0x14(%edx)
-4000877d: 8b 45 d8 mov -0x28(%ebp),%eax
-40008780: 8b 40 10 mov 0x10(%eax),%eax
-40008783: 03 45 e4 add -0x1c(%ebp),%eax
-40008786: 8d 50 18 lea 0x18(%eax),%edx
-40008789: 8b 45 d8 mov -0x28(%ebp),%eax
-4000878c: 89 50 10 mov %edx,0x10(%eax)
-4000878f: 8b 4d e4 mov -0x1c(%ebp),%ecx
-40008792: bb 00 00 00 00 mov $0x0,%ebx
-40008797: a1 30 a6 00 40 mov 0x4000a630,%eax
-4000879c: 8b 15 34 a6 00 40 mov 0x4000a634,%edx
-400087a2: 01 c8 add %ecx,%eax
-400087a4: 11 da adc %ebx,%edx
-400087a6: a3 30 a6 00 40 mov %eax,0x4000a630
-400087ab: 89 15 34 a6 00 40 mov %edx,0x4000a634
-400087b1: 8b 45 dc mov -0x24(%ebp),%eax
-400087b4: 83 c0 18 add $0x18,%eax
-400087b7: 89 45 d0 mov %eax,-0x30(%ebp)
-400087ba: 8b 45 d0 mov -0x30(%ebp),%eax
-400087bd: 83 c0 02 add $0x2,%eax
-400087c0: 89 45 d0 mov %eax,-0x30(%ebp)
-400087c3: 8b 45 d0 mov -0x30(%ebp),%eax
-400087c6: 83 e0 03 and $0x3,%eax
-400087c9: 89 45 f0 mov %eax,-0x10(%ebp)
-400087cc: 83 7d f0 00 cmpl $0x0,-0x10(%ebp)
-400087d0: 74 14 je 400087e6 <malloc+0x50e>
-400087d2: b8 04 00 00 00 mov $0x4,%eax
-400087d7: 2b 45 f0 sub -0x10(%ebp),%eax
-400087da: 89 45 f0 mov %eax,-0x10(%ebp)
-400087dd: 8b 45 d0 mov -0x30(%ebp),%eax
-400087e0: 03 45 f0 add -0x10(%ebp),%eax
-400087e3: 89 45 d0 mov %eax,-0x30(%ebp)
-400087e6: 8b 45 d0 mov -0x30(%ebp),%eax
-400087e9: 83 e8 02 sub $0x2,%eax
-400087ec: 89 c2 mov %eax,%edx
-400087ee: 8b 45 f0 mov -0x10(%ebp),%eax
-400087f1: 83 c0 02 add $0x2,%eax
-400087f4: 66 89 02 mov %ax,(%edx)
-400087f7: e8 92 f8 ff ff call 4000808e <liballoc_unlock>
-400087fc: 8b 55 d0 mov -0x30(%ebp),%edx
-400087ff: 89 55 a4 mov %edx,-0x5c(%ebp)
-40008802: e9 a0 01 00 00 jmp 400089a7 <malloc+0x6cf>
-40008807: 8b 45 dc mov -0x24(%ebp),%eax
-4000880a: 8b 40 04 mov 0x4(%eax),%eax
-4000880d: 85 c0 test %eax,%eax
-4000880f: 0f 84 14 01 00 00 je 40008929 <malloc+0x651>
-40008815: 8b 45 dc mov -0x24(%ebp),%eax
-40008818: 8b 40 04 mov 0x4(%eax),%eax
-4000881b: 89 c2 mov %eax,%edx
-4000881d: 8b 45 dc mov -0x24(%ebp),%eax
-40008820: 29 c2 sub %eax,%edx
-40008822: 8b 45 dc mov -0x24(%ebp),%eax
-40008825: 8b 40 10 mov 0x10(%eax),%eax
-40008828: 89 d1 mov %edx,%ecx
-4000882a: 29 c1 sub %eax,%ecx
-4000882c: 89 c8 mov %ecx,%eax
-4000882e: 83 e8 18 sub $0x18,%eax
-40008831: 89 45 d4 mov %eax,-0x2c(%ebp)
-40008834: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008837: 83 c0 18 add $0x18,%eax
-4000883a: 3b 45 d4 cmp -0x2c(%ebp),%eax
-4000883d: 0f 87 e6 00 00 00 ja 40008929 <malloc+0x651>
-40008843: 8b 45 dc mov -0x24(%ebp),%eax
-40008846: 8b 50 10 mov 0x10(%eax),%edx
-40008849: 8b 45 dc mov -0x24(%ebp),%eax
-4000884c: 8d 04 02 lea (%edx,%eax,1),%eax
-4000884f: 83 c0 18 add $0x18,%eax
-40008852: 89 45 e0 mov %eax,-0x20(%ebp)
-40008855: 8b 45 e0 mov -0x20(%ebp),%eax
-40008858: c7 40 0c de c0 01 c0 movl $0xc001c0de,0xc(%eax)
-4000885f: 8b 45 dc mov -0x24(%ebp),%eax
-40008862: 8b 50 04 mov 0x4(%eax),%edx
-40008865: 8b 45 e0 mov -0x20(%ebp),%eax
-40008868: 89 50 04 mov %edx,0x4(%eax)
-4000886b: 8b 55 e0 mov -0x20(%ebp),%edx
-4000886e: 8b 45 dc mov -0x24(%ebp),%eax
-40008871: 89 02 mov %eax,(%edx)
-40008873: 8b 55 e0 mov -0x20(%ebp),%edx
-40008876: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008879: 89 42 10 mov %eax,0x10(%edx)
-4000887c: 8b 55 e0 mov -0x20(%ebp),%edx
-4000887f: 8b 45 08 mov 0x8(%ebp),%eax
-40008882: 89 42 14 mov %eax,0x14(%edx)
-40008885: 8b 55 e0 mov -0x20(%ebp),%edx
-40008888: 8b 45 d8 mov -0x28(%ebp),%eax
-4000888b: 89 42 08 mov %eax,0x8(%edx)
-4000888e: 8b 45 dc mov -0x24(%ebp),%eax
-40008891: 8b 50 04 mov 0x4(%eax),%edx
-40008894: 8b 45 e0 mov -0x20(%ebp),%eax
-40008897: 89 02 mov %eax,(%edx)
-40008899: 8b 55 dc mov -0x24(%ebp),%edx
-4000889c: 8b 45 e0 mov -0x20(%ebp),%eax
-4000889f: 89 42 04 mov %eax,0x4(%edx)
-400088a2: 8b 45 d8 mov -0x28(%ebp),%eax
-400088a5: 8b 40 10 mov 0x10(%eax),%eax
-400088a8: 03 45 e4 add -0x1c(%ebp),%eax
-400088ab: 8d 50 18 lea 0x18(%eax),%edx
-400088ae: 8b 45 d8 mov -0x28(%ebp),%eax
-400088b1: 89 50 10 mov %edx,0x10(%eax)
-400088b4: 8b 4d e4 mov -0x1c(%ebp),%ecx
-400088b7: bb 00 00 00 00 mov $0x0,%ebx
-400088bc: a1 30 a6 00 40 mov 0x4000a630,%eax
-400088c1: 8b 15 34 a6 00 40 mov 0x4000a634,%edx
-400088c7: 01 c8 add %ecx,%eax
-400088c9: 11 da adc %ebx,%edx
-400088cb: a3 30 a6 00 40 mov %eax,0x4000a630
-400088d0: 89 15 34 a6 00 40 mov %edx,0x4000a634
-400088d6: 8b 45 e0 mov -0x20(%ebp),%eax
-400088d9: 83 c0 18 add $0x18,%eax
-400088dc: 89 45 d0 mov %eax,-0x30(%ebp)
-400088df: 8b 45 d0 mov -0x30(%ebp),%eax
-400088e2: 83 c0 02 add $0x2,%eax
-400088e5: 89 45 d0 mov %eax,-0x30(%ebp)
-400088e8: 8b 45 d0 mov -0x30(%ebp),%eax
-400088eb: 83 e0 03 and $0x3,%eax
-400088ee: 89 45 f4 mov %eax,-0xc(%ebp)
-400088f1: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400088f5: 74 14 je 4000890b <malloc+0x633>
-400088f7: b8 04 00 00 00 mov $0x4,%eax
-400088fc: 2b 45 f4 sub -0xc(%ebp),%eax
-400088ff: 89 45 f4 mov %eax,-0xc(%ebp)
-40008902: 8b 45 d0 mov -0x30(%ebp),%eax
-40008905: 03 45 f4 add -0xc(%ebp),%eax
-40008908: 89 45 d0 mov %eax,-0x30(%ebp)
-4000890b: 8b 45 d0 mov -0x30(%ebp),%eax
-4000890e: 83 e8 02 sub $0x2,%eax
-40008911: 89 c2 mov %eax,%edx
-40008913: 8b 45 f4 mov -0xc(%ebp),%eax
-40008916: 83 c0 02 add $0x2,%eax
-40008919: 66 89 02 mov %ax,(%edx)
-4000891c: e8 6d f7 ff ff call 4000808e <liballoc_unlock>
-40008921: 8b 45 d0 mov -0x30(%ebp),%eax
-40008924: 89 45 a4 mov %eax,-0x5c(%ebp)
-40008927: eb 7e jmp 400089a7 <malloc+0x6cf>
-40008929: 8b 45 dc mov -0x24(%ebp),%eax
-4000892c: 8b 40 04 mov 0x4(%eax),%eax
-4000892f: 89 45 dc mov %eax,-0x24(%ebp)
-40008932: 83 7d dc 00 cmpl $0x0,-0x24(%ebp)
-40008936: 0f 85 a5 fd ff ff jne 400086e1 <malloc+0x409>
-4000893c: 8b 45 d8 mov -0x28(%ebp),%eax
-4000893f: 8b 40 04 mov 0x4(%eax),%eax
-40008942: 85 c0 test %eax,%eax
-40008944: 75 42 jne 40008988 <malloc+0x6b0>
-40008946: 83 7d c4 01 cmpl $0x1,-0x3c(%ebp)
-4000894a: 75 11 jne 4000895d <malloc+0x685>
-4000894c: a1 20 a6 00 40 mov 0x4000a620,%eax
-40008951: 89 45 d8 mov %eax,-0x28(%ebp)
-40008954: c7 45 c4 00 00 00 00 movl $0x0,-0x3c(%ebp)
-4000895b: eb 34 jmp 40008991 <malloc+0x6b9>
-4000895d: 83 ec 0c sub $0xc,%esp
-40008960: ff 75 e4 pushl -0x1c(%ebp)
-40008963: e8 4f f8 ff ff call 400081b7 <allocate_new_page>
-40008968: 83 c4 10 add $0x10,%esp
-4000896b: 89 c2 mov %eax,%edx
-4000896d: 8b 45 d8 mov -0x28(%ebp),%eax
-40008970: 89 50 04 mov %edx,0x4(%eax)
-40008973: 8b 45 d8 mov -0x28(%ebp),%eax
-40008976: 8b 40 04 mov 0x4(%eax),%eax
-40008979: 85 c0 test %eax,%eax
-4000897b: 74 1e je 4000899b <malloc+0x6c3>
-4000897d: 8b 45 d8 mov -0x28(%ebp),%eax
-40008980: 8b 50 04 mov 0x4(%eax),%edx
-40008983: 8b 45 d8 mov -0x28(%ebp),%eax
-40008986: 89 02 mov %eax,(%edx)
-40008988: 8b 45 d8 mov -0x28(%ebp),%eax
-4000898b: 8b 40 04 mov 0x4(%eax),%eax
-4000898e: 89 45 d8 mov %eax,-0x28(%ebp)
-40008991: 83 7d d8 00 cmpl $0x0,-0x28(%ebp)
-40008995: 0f 85 62 fa ff ff jne 400083fd <malloc+0x125>
-4000899b: e8 ee f6 ff ff call 4000808e <liballoc_unlock>
-400089a0: c7 45 a4 00 00 00 00 movl $0x0,-0x5c(%ebp)
-400089a7: 8b 45 a4 mov -0x5c(%ebp),%eax
-400089aa: 8b 5d fc mov -0x4(%ebp),%ebx
-400089ad: c9 leave
-400089ae: c3 ret
-
-400089af <free>:
-400089af: 55 push %ebp
-400089b0: 89 e5 mov %esp,%ebp
-400089b2: 57 push %edi
-400089b3: 56 push %esi
-400089b4: 53 push %ebx
-400089b5: 83 ec 2c sub $0x2c,%esp
-400089b8: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-400089bc: 75 21 jne 400089df <free+0x30>
-400089be: a1 38 a6 00 40 mov 0x4000a638,%eax
-400089c3: 8b 15 3c a6 00 40 mov 0x4000a63c,%edx
-400089c9: 83 c0 01 add $0x1,%eax
-400089cc: 83 d2 00 adc $0x0,%edx
-400089cf: a3 38 a6 00 40 mov %eax,0x4000a638
-400089d4: 89 15 3c a6 00 40 mov %edx,0x4000a63c
-400089da: e9 60 02 00 00 jmp 40008c3f <free+0x290>
-400089df: 8b 45 08 mov 0x8(%ebp),%eax
-400089e2: 83 e8 02 sub $0x2,%eax
-400089e5: 66 8b 00 mov (%eax),%ax
-400089e8: 0f b7 c0 movzwl %ax,%eax
-400089eb: 89 45 e8 mov %eax,-0x18(%ebp)
-400089ee: 83 7d e8 05 cmpl $0x5,-0x18(%ebp)
-400089f2: 77 09 ja 400089fd <free+0x4e>
-400089f4: 8b 45 08 mov 0x8(%ebp),%eax
-400089f7: 2b 45 e8 sub -0x18(%ebp),%eax
-400089fa: 89 45 08 mov %eax,0x8(%ebp)
-400089fd: e8 7a f6 ff ff call 4000807c <liballoc_lock>
-40008a02: 8b 45 08 mov 0x8(%ebp),%eax
-40008a05: 83 e8 18 sub $0x18,%eax
-40008a08: 89 45 e0 mov %eax,-0x20(%ebp)
-40008a0b: 8b 45 e0 mov -0x20(%ebp),%eax
-40008a0e: 8b 40 0c mov 0xc(%eax),%eax
-40008a11: 3d de c0 01 c0 cmp $0xc001c0de,%eax
-40008a16: 74 78 je 40008a90 <free+0xe1>
-40008a18: a1 40 a6 00 40 mov 0x4000a640,%eax
-40008a1d: 8b 15 44 a6 00 40 mov 0x4000a644,%edx
-40008a23: 83 c0 01 add $0x1,%eax
-40008a26: 83 d2 00 adc $0x0,%edx
-40008a29: a3 40 a6 00 40 mov %eax,0x4000a640
-40008a2e: 89 15 44 a6 00 40 mov %edx,0x4000a644
-40008a34: 8b 45 e0 mov -0x20(%ebp),%eax
-40008a37: 8b 40 0c mov 0xc(%eax),%eax
-40008a3a: 25 ff ff ff 00 and $0xffffff,%eax
-40008a3f: 3d de c0 01 00 cmp $0x1c0de,%eax
-40008a44: 74 24 je 40008a6a <free+0xbb>
-40008a46: 8b 45 e0 mov -0x20(%ebp),%eax
-40008a49: 8b 40 0c mov 0xc(%eax),%eax
-40008a4c: 25 ff ff 00 00 and $0xffff,%eax
-40008a51: 3d de c0 00 00 cmp $0xc0de,%eax
-40008a56: 74 12 je 40008a6a <free+0xbb>
-40008a58: 8b 45 e0 mov -0x20(%ebp),%eax
-40008a5b: 8b 40 0c mov 0xc(%eax),%eax
-40008a5e: 25 ff 00 00 00 and $0xff,%eax
-40008a63: 3d de 00 00 00 cmp $0xde,%eax
-40008a68: 75 1c jne 40008a86 <free+0xd7>
-40008a6a: a1 48 a6 00 40 mov 0x4000a648,%eax
-40008a6f: 8b 15 4c a6 00 40 mov 0x4000a64c,%edx
-40008a75: 83 c0 01 add $0x1,%eax
-40008a78: 83 d2 00 adc $0x0,%edx
-40008a7b: a3 48 a6 00 40 mov %eax,0x4000a648
-40008a80: 89 15 4c a6 00 40 mov %edx,0x4000a64c
-40008a86: e8 03 f6 ff ff call 4000808e <liballoc_unlock>
-40008a8b: e9 af 01 00 00 jmp 40008c3f <free+0x290>
-40008a90: 8b 45 e0 mov -0x20(%ebp),%eax
-40008a93: 8b 40 10 mov 0x10(%eax),%eax
-40008a96: c1 e8 02 shr $0x2,%eax
-40008a99: 50 push %eax
-40008a9a: 68 de c0 0f d0 push $0xd00fc0de
-40008a9f: ff 75 08 pushl 0x8(%ebp)
-40008aa2: e8 83 f6 ff ff call 4000812a <liballoc_fill_dword>
-40008aa7: 83 c4 0c add $0xc,%esp
-40008aaa: 8b 45 e0 mov -0x20(%ebp),%eax
-40008aad: 8b 40 08 mov 0x8(%eax),%eax
-40008ab0: 89 45 e4 mov %eax,-0x1c(%ebp)
-40008ab3: 8b 0d 30 a6 00 40 mov 0x4000a630,%ecx
-40008ab9: 8b 1d 34 a6 00 40 mov 0x4000a634,%ebx
-40008abf: 8b 45 e0 mov -0x20(%ebp),%eax
-40008ac2: 8b 40 10 mov 0x10(%eax),%eax
-40008ac5: ba 00 00 00 00 mov $0x0,%edx
-40008aca: 89 ce mov %ecx,%esi
-40008acc: 89 df mov %ebx,%edi
-40008ace: 29 c6 sub %eax,%esi
-40008ad0: 19 d7 sbb %edx,%edi
-40008ad2: 89 f0 mov %esi,%eax
-40008ad4: 89 fa mov %edi,%edx
-40008ad6: a3 30 a6 00 40 mov %eax,0x4000a630
-40008adb: 89 15 34 a6 00 40 mov %edx,0x4000a634
-40008ae1: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008ae4: 8b 50 10 mov 0x10(%eax),%edx
-40008ae7: 8b 45 e0 mov -0x20(%ebp),%eax
-40008aea: 8b 40 10 mov 0x10(%eax),%eax
-40008aed: 89 d7 mov %edx,%edi
-40008aef: 29 c7 sub %eax,%edi
-40008af1: 89 f8 mov %edi,%eax
-40008af3: 8d 50 e8 lea -0x18(%eax),%edx
-40008af6: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008af9: 89 50 10 mov %edx,0x10(%eax)
-40008afc: 8b 45 e0 mov -0x20(%ebp),%eax
-40008aff: c7 40 0c ad de ad de movl $0xdeaddead,0xc(%eax)
-40008b06: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b09: 8b 40 04 mov 0x4(%eax),%eax
-40008b0c: 85 c0 test %eax,%eax
-40008b0e: 74 0d je 40008b1d <free+0x16e>
-40008b10: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b13: 8b 50 04 mov 0x4(%eax),%edx
-40008b16: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b19: 8b 00 mov (%eax),%eax
-40008b1b: 89 02 mov %eax,(%edx)
-40008b1d: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b20: 8b 00 mov (%eax),%eax
-40008b22: 85 c0 test %eax,%eax
-40008b24: 74 0e je 40008b34 <free+0x185>
-40008b26: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b29: 8b 10 mov (%eax),%edx
-40008b2b: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b2e: 8b 40 04 mov 0x4(%eax),%eax
-40008b31: 89 42 04 mov %eax,0x4(%edx)
-40008b34: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b37: 8b 00 mov (%eax),%eax
-40008b39: 85 c0 test %eax,%eax
-40008b3b: 75 0c jne 40008b49 <free+0x19a>
-40008b3d: 8b 45 e0 mov -0x20(%ebp),%eax
-40008b40: 8b 50 04 mov 0x4(%eax),%edx
-40008b43: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b46: 89 50 14 mov %edx,0x14(%eax)
-40008b49: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b4c: 8b 40 14 mov 0x14(%eax),%eax
-40008b4f: 85 c0 test %eax,%eax
-40008b51: 0f 85 9c 00 00 00 jne 40008bf3 <free+0x244>
-40008b57: a1 20 a6 00 40 mov 0x4000a620,%eax
-40008b5c: 3b 45 e4 cmp -0x1c(%ebp),%eax
-40008b5f: 75 0b jne 40008b6c <free+0x1bd>
-40008b61: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b64: 8b 40 04 mov 0x4(%eax),%eax
-40008b67: a3 20 a6 00 40 mov %eax,0x4000a620
-40008b6c: a1 24 a6 00 40 mov 0x4000a624,%eax
-40008b71: 3b 45 e4 cmp -0x1c(%ebp),%eax
-40008b74: 75 0a jne 40008b80 <free+0x1d1>
-40008b76: c7 05 24 a6 00 40 00 movl $0x0,0x4000a624
-40008b7d: 00 00 00
-40008b80: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b83: 8b 00 mov (%eax),%eax
-40008b85: 85 c0 test %eax,%eax
-40008b87: 74 0e je 40008b97 <free+0x1e8>
-40008b89: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b8c: 8b 10 mov (%eax),%edx
-40008b8e: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b91: 8b 40 04 mov 0x4(%eax),%eax
-40008b94: 89 42 04 mov %eax,0x4(%edx)
-40008b97: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008b9a: 8b 40 04 mov 0x4(%eax),%eax
-40008b9d: 85 c0 test %eax,%eax
-40008b9f: 74 0d je 40008bae <free+0x1ff>
-40008ba1: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008ba4: 8b 50 04 mov 0x4(%eax),%edx
-40008ba7: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008baa: 8b 00 mov (%eax),%eax
-40008bac: 89 02 mov %eax,(%edx)
-40008bae: 8b 0d 28 a6 00 40 mov 0x4000a628,%ecx
-40008bb4: 8b 1d 2c a6 00 40 mov 0x4000a62c,%ebx
-40008bba: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008bbd: 8b 40 0c mov 0xc(%eax),%eax
-40008bc0: ba 00 00 00 00 mov $0x0,%edx
-40008bc5: 89 ce mov %ecx,%esi
-40008bc7: 89 df mov %ebx,%edi
-40008bc9: 29 c6 sub %eax,%esi
-40008bcb: 19 d7 sbb %edx,%edi
-40008bcd: 89 f0 mov %esi,%eax
-40008bcf: 89 fa mov %edi,%edx
-40008bd1: a3 28 a6 00 40 mov %eax,0x4000a628
-40008bd6: 89 15 2c a6 00 40 mov %edx,0x4000a62c
-40008bdc: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008bdf: 8b 40 08 mov 0x8(%eax),%eax
-40008be2: 83 ec 08 sub $0x8,%esp
-40008be5: 50 push %eax
-40008be6: ff 75 e4 pushl -0x1c(%ebp)
-40008be9: e8 ee f4 ff ff call 400080dc <liballoc_free>
-40008bee: 83 c4 10 add $0x10,%esp
-40008bf1: eb 47 jmp 40008c3a <free+0x28b>
-40008bf3: a1 24 a6 00 40 mov 0x4000a624,%eax
-40008bf8: 85 c0 test %eax,%eax
-40008bfa: 74 3e je 40008c3a <free+0x28b>
-40008bfc: a1 24 a6 00 40 mov 0x4000a624,%eax
-40008c01: 8b 50 0c mov 0xc(%eax),%edx
-40008c04: a1 24 a6 00 40 mov 0x4000a624,%eax
-40008c09: 8b 40 10 mov 0x10(%eax),%eax
-40008c0c: 89 d7 mov %edx,%edi
-40008c0e: 29 c7 sub %eax,%edi
-40008c10: 89 f8 mov %edi,%eax
-40008c12: 89 45 ec mov %eax,-0x14(%ebp)
-40008c15: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008c18: 8b 50 0c mov 0xc(%eax),%edx
-40008c1b: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008c1e: 8b 40 10 mov 0x10(%eax),%eax
-40008c21: 89 d1 mov %edx,%ecx
-40008c23: 29 c1 sub %eax,%ecx
-40008c25: 89 c8 mov %ecx,%eax
-40008c27: 89 45 f0 mov %eax,-0x10(%ebp)
-40008c2a: 8b 45 f0 mov -0x10(%ebp),%eax
-40008c2d: 3b 45 ec cmp -0x14(%ebp),%eax
-40008c30: 76 08 jbe 40008c3a <free+0x28b>
-40008c32: 8b 45 e4 mov -0x1c(%ebp),%eax
-40008c35: a3 24 a6 00 40 mov %eax,0x4000a624
-40008c3a: e8 4f f4 ff ff call 4000808e <liballoc_unlock>
-40008c3f: 8d 65 f4 lea -0xc(%ebp),%esp
-40008c42: 5b pop %ebx
-40008c43: 5e pop %esi
-40008c44: 5f pop %edi
-40008c45: c9 leave
-40008c46: c3 ret
-
-40008c47 <calloc>:
-40008c47: 55 push %ebp
-40008c48: 89 e5 mov %esp,%ebp
-40008c4a: 83 ec 18 sub $0x18,%esp
-40008c4d: 8b 45 08 mov 0x8(%ebp),%eax
-40008c50: 0f af 45 0c imul 0xc(%ebp),%eax
-40008c54: 89 45 f8 mov %eax,-0x8(%ebp)
-40008c57: 8b 45 f8 mov -0x8(%ebp),%eax
-40008c5a: 83 ec 0c sub $0xc,%esp
-40008c5d: 50 push %eax
-40008c5e: e8 75 f6 ff ff call 400082d8 <malloc>
-40008c63: 83 c4 10 add $0x10,%esp
-40008c66: 89 45 fc mov %eax,-0x4(%ebp)
-40008c69: 8b 45 f8 mov -0x8(%ebp),%eax
-40008c6c: 50 push %eax
-40008c6d: 6a 00 push $0x0
-40008c6f: ff 75 fc pushl -0x4(%ebp)
-40008c72: e8 87 f4 ff ff call 400080fe <liballoc_memset>
-40008c77: 83 c4 0c add $0xc,%esp
-40008c7a: 8b 45 fc mov -0x4(%ebp),%eax
-40008c7d: c9 leave
-40008c7e: c3 ret
-
-40008c7f <realloc>:
-40008c7f: 55 push %ebp
-40008c80: 89 e5 mov %esp,%ebp
-40008c82: 83 ec 18 sub $0x18,%esp
-40008c85: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40008c89: 75 1a jne 40008ca5 <realloc+0x26>
-40008c8b: 83 ec 0c sub $0xc,%esp
-40008c8e: ff 75 08 pushl 0x8(%ebp)
-40008c91: e8 19 fd ff ff call 400089af <free>
-40008c96: 83 c4 10 add $0x10,%esp
-40008c99: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40008ca0: e9 39 01 00 00 jmp 40008dde <realloc+0x15f>
-40008ca5: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-40008ca9: 75 16 jne 40008cc1 <realloc+0x42>
-40008cab: 83 ec 0c sub $0xc,%esp
-40008cae: ff 75 0c pushl 0xc(%ebp)
-40008cb1: e8 22 f6 ff ff call 400082d8 <malloc>
-40008cb6: 83 c4 10 add $0x10,%esp
-40008cb9: 89 45 ec mov %eax,-0x14(%ebp)
-40008cbc: e9 1d 01 00 00 jmp 40008dde <realloc+0x15f>
-40008cc1: 8b 45 08 mov 0x8(%ebp),%eax
-40008cc4: 89 45 f0 mov %eax,-0x10(%ebp)
-40008cc7: 8b 45 f0 mov -0x10(%ebp),%eax
-40008cca: 83 e8 02 sub $0x2,%eax
-40008ccd: 66 8b 00 mov (%eax),%ax
-40008cd0: 0f b7 c0 movzwl %ax,%eax
-40008cd3: 89 45 fc mov %eax,-0x4(%ebp)
-40008cd6: 83 7d fc 05 cmpl $0x5,-0x4(%ebp)
-40008cda: 77 09 ja 40008ce5 <realloc+0x66>
-40008cdc: 8b 45 f0 mov -0x10(%ebp),%eax
-40008cdf: 2b 45 fc sub -0x4(%ebp),%eax
-40008ce2: 89 45 f0 mov %eax,-0x10(%ebp)
-40008ce5: e8 92 f3 ff ff call 4000807c <liballoc_lock>
-40008cea: 8b 45 f0 mov -0x10(%ebp),%eax
-40008ced: 83 e8 18 sub $0x18,%eax
-40008cf0: 89 45 f4 mov %eax,-0xc(%ebp)
-40008cf3: 8b 45 f4 mov -0xc(%ebp),%eax
-40008cf6: 8b 40 0c mov 0xc(%eax),%eax
-40008cf9: 3d de c0 01 c0 cmp $0xc001c0de,%eax
-40008cfe: 74 7c je 40008d7c <realloc+0xfd>
-40008d00: a1 40 a6 00 40 mov 0x4000a640,%eax
-40008d05: 8b 15 44 a6 00 40 mov 0x4000a644,%edx
-40008d0b: 83 c0 01 add $0x1,%eax
-40008d0e: 83 d2 00 adc $0x0,%edx
-40008d11: a3 40 a6 00 40 mov %eax,0x4000a640
-40008d16: 89 15 44 a6 00 40 mov %edx,0x4000a644
-40008d1c: 8b 45 f4 mov -0xc(%ebp),%eax
-40008d1f: 8b 40 0c mov 0xc(%eax),%eax
-40008d22: 25 ff ff ff 00 and $0xffffff,%eax
-40008d27: 3d de c0 01 00 cmp $0x1c0de,%eax
-40008d2c: 74 24 je 40008d52 <realloc+0xd3>
-40008d2e: 8b 45 f4 mov -0xc(%ebp),%eax
-40008d31: 8b 40 0c mov 0xc(%eax),%eax
-40008d34: 25 ff ff 00 00 and $0xffff,%eax
-40008d39: 3d de c0 00 00 cmp $0xc0de,%eax
-40008d3e: 74 12 je 40008d52 <realloc+0xd3>
-40008d40: 8b 45 f4 mov -0xc(%ebp),%eax
-40008d43: 8b 40 0c mov 0xc(%eax),%eax
-40008d46: 25 ff 00 00 00 and $0xff,%eax
-40008d4b: 3d de 00 00 00 cmp $0xde,%eax
-40008d50: 75 1c jne 40008d6e <realloc+0xef>
-40008d52: a1 48 a6 00 40 mov 0x4000a648,%eax
-40008d57: 8b 15 4c a6 00 40 mov 0x4000a64c,%edx
-40008d5d: 83 c0 01 add $0x1,%eax
-40008d60: 83 d2 00 adc $0x0,%edx
-40008d63: a3 48 a6 00 40 mov %eax,0x4000a648
-40008d68: 89 15 4c a6 00 40 mov %edx,0x4000a64c
-40008d6e: e8 1b f3 ff ff call 4000808e <liballoc_unlock>
-40008d73: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40008d7a: eb 62 jmp 40008dde <realloc+0x15f>
-40008d7c: 8b 45 f4 mov -0xc(%ebp),%eax
-40008d7f: 8b 40 14 mov 0x14(%eax),%eax
-40008d82: 89 45 f8 mov %eax,-0x8(%ebp)
-40008d85: 8b 45 f8 mov -0x8(%ebp),%eax
-40008d88: 3b 45 0c cmp 0xc(%ebp),%eax
-40008d8b: 72 16 jb 40008da3 <realloc+0x124>
-40008d8d: 8b 55 f4 mov -0xc(%ebp),%edx
-40008d90: 8b 45 0c mov 0xc(%ebp),%eax
-40008d93: 89 42 14 mov %eax,0x14(%edx)
-40008d96: e8 f3 f2 ff ff call 4000808e <liballoc_unlock>
-40008d9b: 8b 45 08 mov 0x8(%ebp),%eax
-40008d9e: 89 45 ec mov %eax,-0x14(%ebp)
-40008da1: eb 3b jmp 40008dde <realloc+0x15f>
-40008da3: e8 e6 f2 ff ff call 4000808e <liballoc_unlock>
-40008da8: 83 ec 0c sub $0xc,%esp
-40008dab: ff 75 0c pushl 0xc(%ebp)
-40008dae: e8 25 f5 ff ff call 400082d8 <malloc>
-40008db3: 83 c4 10 add $0x10,%esp
-40008db6: 89 45 f0 mov %eax,-0x10(%ebp)
-40008db9: ff 75 f8 pushl -0x8(%ebp)
-40008dbc: ff 75 08 pushl 0x8(%ebp)
-40008dbf: ff 75 f0 pushl -0x10(%ebp)
-40008dc2: e8 94 f3 ff ff call 4000815b <liballoc_memcpy>
-40008dc7: 83 c4 0c add $0xc,%esp
-40008dca: 83 ec 0c sub $0xc,%esp
-40008dcd: ff 75 08 pushl 0x8(%ebp)
-40008dd0: e8 da fb ff ff call 400089af <free>
-40008dd5: 83 c4 10 add $0x10,%esp
-40008dd8: 8b 45 f0 mov -0x10(%ebp),%eax
-40008ddb: 89 45 ec mov %eax,-0x14(%ebp)
-40008dde: 8b 45 ec mov -0x14(%ebp),%eax
-40008de1: c9 leave
-40008de2: c3 ret
-40008de3: 90 nop
-
-40008de4 <strtol>:
-/*
- * Copyright (c) 2007 The tyndur Project. All rights reserved.
- *
- * This code is derived from software contributed to the tyndur Project
- * by Antoine Kaufmann.
-40008de4: 55 push %ebp
-40008de5: 89 e5 mov %esp,%ebp
-40008de7: 83 ec 18 sub $0x18,%esp
- *
-40008dea: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%ebp)
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
-40008df1: eb 03 jmp 40008df6 <strtol+0x12>
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
-40008df3: ff 45 08 incl 0x8(%ebp)
- * This code is derived from software contributed to the tyndur Project
- * by Antoine Kaufmann.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
-40008df6: 8b 45 08 mov 0x8(%ebp),%eax
-40008df9: 8a 00 mov (%eax),%al
-40008dfb: 3c 20 cmp $0x20,%al
-40008dfd: 74 f4 je 40008df3 <strtol+0xf>
-40008dff: 8b 45 08 mov 0x8(%ebp),%eax
-40008e02: 8a 00 mov (%eax),%al
-40008e04: 3c 0a cmp $0xa,%al
-40008e06: 74 eb je 40008df3 <strtol+0xf>
-40008e08: 8b 45 08 mov 0x8(%ebp),%eax
-40008e0b: 8a 00 mov (%eax),%al
-40008e0d: 3c 09 cmp $0x9,%al
-40008e0f: 74 e2 je 40008df3 <strtol+0xf>
-40008e11: 8b 45 08 mov 0x8(%ebp),%eax
-40008e14: 8a 00 mov (%eax),%al
-40008e16: 3c 0d cmp $0xd,%al
-40008e18: 74 d9 je 40008df3 <strtol+0xf>
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
-40008e1a: e9 df 00 00 00 jmp 40008efe <strtol+0x11a>
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
-40008e1f: 8b 45 08 mov 0x8(%ebp),%eax
-40008e22: 8a 00 mov (%eax),%al
-40008e24: 3c 2f cmp $0x2f,%al
-40008e26: 7e 2c jle 40008e54 <strtol+0x70>
-40008e28: 8b 45 08 mov 0x8(%ebp),%eax
-40008e2b: 8a 00 mov (%eax),%al
-40008e2d: 3c 39 cmp $0x39,%al
-40008e2f: 7f 23 jg 40008e54 <strtol+0x70>
-40008e31: 8b 45 08 mov 0x8(%ebp),%eax
-40008e34: 8a 00 mov (%eax),%al
-40008e36: 0f be c0 movsbl %al,%eax
-40008e39: 83 e8 30 sub $0x30,%eax
-40008e3c: 3b 45 10 cmp 0x10(%ebp),%eax
-40008e3f: 7d 13 jge 40008e54 <strtol+0x70>
- * This product includes software developed by the tyndur Project
- * and its contributors.
-40008e41: 8b 45 08 mov 0x8(%ebp),%eax
-40008e44: 8a 00 mov (%eax),%al
-40008e46: 0f be c0 movsbl %al,%eax
-40008e49: 83 e8 30 sub $0x30,%eax
-40008e4c: 89 45 fc mov %eax,-0x4(%ebp)
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
-40008e4f: e9 9a 00 00 00 jmp 40008eee <strtol+0x10a>
- * This product includes software developed by the tyndur Project
- * and its contributors.
- * 4. Neither the name of the tyndur Project nor the names of its
- * contributors may be used to endorse or promote products derived
-40008e54: 8b 45 08 mov 0x8(%ebp),%eax
-40008e57: 8a 00 mov (%eax),%al
-40008e59: 3c 60 cmp $0x60,%al
-40008e5b: 7e 09 jle 40008e66 <strtol+0x82>
-40008e5d: 8b 45 08 mov 0x8(%ebp),%eax
-40008e60: 8a 00 mov (%eax),%al
-40008e62: 3c 7a cmp $0x7a,%al
-40008e64: 7e 1a jle 40008e80 <strtol+0x9c>
-40008e66: 8b 45 08 mov 0x8(%ebp),%eax
-40008e69: 8a 00 mov (%eax),%al
-40008e6b: 3c 40 cmp $0x40,%al
-40008e6d: 0f 8e 98 00 00 00 jle 40008f0b <strtol+0x127>
-40008e73: 8b 45 08 mov 0x8(%ebp),%eax
-40008e76: 8a 00 mov (%eax),%al
-40008e78: 3c 5a cmp $0x5a,%al
-40008e7a: 0f 8f 8b 00 00 00 jg 40008f0b <strtol+0x127>
-40008e80: 8b 45 08 mov 0x8(%ebp),%eax
-40008e83: 8a 00 mov (%eax),%al
-40008e85: 3c 40 cmp $0x40,%al
-40008e87: 7e 19 jle 40008ea2 <strtol+0xbe>
-40008e89: 8b 45 08 mov 0x8(%ebp),%eax
-40008e8c: 8a 00 mov (%eax),%al
-40008e8e: 3c 5a cmp $0x5a,%al
-40008e90: 7f 10 jg 40008ea2 <strtol+0xbe>
-40008e92: 8b 45 08 mov 0x8(%ebp),%eax
-40008e95: 8a 00 mov (%eax),%al
-40008e97: 0f be c0 movsbl %al,%eax
-40008e9a: 83 e8 37 sub $0x37,%eax
-40008e9d: 89 45 e8 mov %eax,-0x18(%ebp)
-40008ea0: eb 0e jmp 40008eb0 <strtol+0xcc>
-40008ea2: 8b 45 08 mov 0x8(%ebp),%eax
-40008ea5: 8a 00 mov (%eax),%al
-40008ea7: 0f be c0 movsbl %al,%eax
-40008eaa: 83 e8 57 sub $0x57,%eax
-40008ead: 89 45 e8 mov %eax,-0x18(%ebp)
-40008eb0: 8b 45 e8 mov -0x18(%ebp),%eax
-40008eb3: 3b 45 10 cmp 0x10(%ebp),%eax
-40008eb6: 7d 53 jge 40008f0b <strtol+0x127>
- * from this software without specific prior written permission.
- *
-40008eb8: 8b 45 08 mov 0x8(%ebp),%eax
-40008ebb: 8a 00 mov (%eax),%al
-40008ebd: 3c 40 cmp $0x40,%al
-40008ebf: 7e 19 jle 40008eda <strtol+0xf6>
-40008ec1: 8b 45 08 mov 0x8(%ebp),%eax
-40008ec4: 8a 00 mov (%eax),%al
-40008ec6: 3c 5a cmp $0x5a,%al
-40008ec8: 7f 10 jg 40008eda <strtol+0xf6>
-40008eca: 8b 45 08 mov 0x8(%ebp),%eax
-40008ecd: 8a 00 mov (%eax),%al
-40008ecf: 0f be c0 movsbl %al,%eax
-40008ed2: 83 e8 37 sub $0x37,%eax
-40008ed5: 89 45 ec mov %eax,-0x14(%ebp)
-40008ed8: eb 0e jmp 40008ee8 <strtol+0x104>
-40008eda: 8b 45 08 mov 0x8(%ebp),%eax
-40008edd: 8a 00 mov (%eax),%al
-40008edf: 0f be c0 movsbl %al,%eax
-40008ee2: 83 e8 57 sub $0x57,%eax
-40008ee5: 89 45 ec mov %eax,-0x14(%ebp)
-40008ee8: 8b 45 ec mov -0x14(%ebp),%eax
-40008eeb: 89 45 fc mov %eax,-0x4(%ebp)
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-40008eee: 8b 45 f8 mov -0x8(%ebp),%eax
-40008ef1: 0f af 45 10 imul 0x10(%ebp),%eax
-40008ef5: 03 45 fc add -0x4(%ebp),%eax
-40008ef8: 89 45 f8 mov %eax,-0x8(%ebp)
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-40008efb: ff 45 08 incl 0x8(%ebp)
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
-40008efe: 8b 45 08 mov 0x8(%ebp),%eax
-40008f01: 8a 00 mov (%eax),%al
-40008f03: 84 c0 test %al,%al
-40008f05: 0f 85 14 ff ff ff jne 40008e1f <strtol+0x3b>
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-40008f0b: 83 7d 0c 00 cmpl $0x0,0xc(%ebp)
-40008f0f: 74 08 je 40008f19 <strtol+0x135>
- */
-
-40008f11: 8b 55 0c mov 0xc(%ebp),%edx
-40008f14: 8b 45 08 mov 0x8(%ebp),%eax
-40008f17: 89 02 mov %eax,(%edx)
-#include <stdio.h>
-#include <stdlib.h>
-
-40008f19: 8b 45 f8 mov -0x8(%ebp),%eax
-#include "cdi.h"
-40008f1c: c9 leave
-40008f1d: c3 ret
-40008f1e: 90 nop
-40008f1f: 90 nop
-
-40008f20 <memchr>:
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-40008f20: 55 push %ebp
-40008f21: 89 e5 mov %esp,%ebp
-40008f23: 83 ec 18 sub $0x18,%esp
-40008f26: 8b 45 0c mov 0xc(%ebp),%eax
-40008f29: 88 45 ec mov %al,-0x14(%ebp)
-#include "cdi/io.h"
-40008f2c: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-40008f30: 74 2a je 40008f5c <memchr+0x3c>
-
-40008f32: 8b 45 08 mov 0x8(%ebp),%eax
-40008f35: 89 45 fc mov %eax,-0x4(%ebp)
-#include "device.h"
-
-
-40008f38: 8b 45 fc mov -0x4(%ebp),%eax
-40008f3b: 8a 00 mov (%eax),%al
-40008f3d: 3a 45 ec cmp -0x14(%ebp),%al
-40008f40: 0f 94 c0 sete %al
-40008f43: ff 45 fc incl -0x4(%ebp)
-40008f46: 84 c0 test %al,%al
-40008f48: 74 09 je 40008f53 <memchr+0x33>
-/**
-40008f4a: 8b 45 fc mov -0x4(%ebp),%eax
-40008f4d: 48 dec %eax
-40008f4e: 89 45 e8 mov %eax,-0x18(%ebp)
-40008f51: eb 10 jmp 40008f63 <memchr+0x43>
- * ATA-Geraet identifizieren
-40008f53: ff 4d 10 decl 0x10(%ebp)
-40008f56: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-40008f5a: 75 dc jne 40008f38 <memchr+0x18>
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-40008f5c: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%ebp)
-40008f63: 8b 45 e8 mov -0x18(%ebp),%eax
- */
-40008f66: c9 leave
-40008f67: c3 ret
-
-40008f68 <memcpy>:
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
-40008f68: 55 push %ebp
-40008f69: 89 e5 mov %esp,%ebp
-40008f6b: 83 ec 10 sub $0x10,%esp
- .registers.ata.command = IDENTIFY_DEVICE,
-40008f6e: 8b 45 08 mov 0x8(%ebp),%eax
-40008f71: 89 45 f4 mov %eax,-0xc(%ebp)
- .block_count = 1,
-40008f74: 8b 45 0c mov 0xc(%ebp),%eax
-40008f77: 89 45 f8 mov %eax,-0x8(%ebp)
- .block_size = ATA_SECTOR_SIZE,
- .buffer = buffer,
-
-40008f7a: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-40008f7e: 0f 84 89 01 00 00 je 4000910d <memcpy+0x1a5>
-40008f84: 8b 45 f4 mov -0xc(%ebp),%eax
-40008f87: 3b 45 f8 cmp -0x8(%ebp),%eax
-40008f8a: 0f 84 7d 01 00 00 je 4000910d <memcpy+0x1a5>
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-40008f90: 8b 45 f4 mov -0xc(%ebp),%eax
-40008f93: 89 c2 mov %eax,%edx
-40008f95: 8b 45 f8 mov -0x8(%ebp),%eax
-40008f98: 39 c2 cmp %eax,%edx
-40008f9a: 0f 83 bd 00 00 00 jae 4000905d <memcpy+0xf5>
-
- // Ein ATA-Geraet
- dev->atapi = 0;
-
-40008fa0: 8b 45 f8 mov -0x8(%ebp),%eax
-40008fa3: 89 45 fc mov %eax,-0x4(%ebp)
- // TODO: Informationen verarbeiten
-40008fa6: 8b 45 f4 mov -0xc(%ebp),%eax
-40008fa9: 0b 45 fc or -0x4(%ebp),%eax
-40008fac: 83 e0 01 and $0x1,%eax
-40008faf: 84 c0 test %al,%al
-40008fb1: 74 4e je 40009001 <memcpy+0x99>
-
- return 1;
-}
-
-/**
-40008fb3: 8b 45 f4 mov -0xc(%ebp),%eax
-40008fb6: 33 45 fc xor -0x4(%ebp),%eax
-40008fb9: 83 e0 01 and $0x1,%eax
-40008fbc: 84 c0 test %al,%al
-40008fbe: 75 06 jne 40008fc6 <memcpy+0x5e>
-40008fc0: 83 7d 10 01 cmpl $0x1,0x10(%ebp)
-40008fc4: 77 08 ja 40008fce <memcpy+0x66>
- * Sektoren von einem ATA-Geraet lesen
-40008fc6: 8b 45 10 mov 0x10(%ebp),%eax
-40008fc9: 89 45 fc mov %eax,-0x4(%ebp)
- // TODO: Informationen verarbeiten
-
- return 1;
-}
-
-/**
-40008fcc: eb 14 jmp 40008fe2 <memcpy+0x7a>
- * Sektoren von einem ATA-Geraet lesen
- *
- * @param start LBA des Startsektors
-40008fce: 8b 45 fc mov -0x4(%ebp),%eax
-40008fd1: 83 e0 01 and $0x1,%eax
-40008fd4: ba 02 00 00 00 mov $0x2,%edx
-40008fd9: 89 d1 mov %edx,%ecx
-40008fdb: 29 c1 sub %eax,%ecx
-40008fdd: 89 c8 mov %ecx,%eax
-40008fdf: 89 45 fc mov %eax,-0x4(%ebp)
- * @param count Anzahl der Sektoren
-40008fe2: 8b 45 fc mov -0x4(%ebp),%eax
-40008fe5: 29 45 10 sub %eax,0x10(%ebp)
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
-40008fe8: 8b 45 f8 mov -0x8(%ebp),%eax
-40008feb: 8a 10 mov (%eax),%dl
-40008fed: 8b 45 f4 mov -0xc(%ebp),%eax
-40008ff0: 88 10 mov %dl,(%eax)
-40008ff2: ff 45 f4 incl -0xc(%ebp)
-40008ff5: ff 45 f8 incl -0x8(%ebp)
-40008ff8: ff 4d fc decl -0x4(%ebp)
-40008ffb: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40008fff: 75 e7 jne 40008fe8 <memcpy+0x80>
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40009001: 8b 45 10 mov 0x10(%ebp),%eax
-40009004: d1 e8 shr %eax
-40009006: 89 45 fc mov %eax,-0x4(%ebp)
-{
-40009009: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000900d: 74 1d je 4000902c <memcpy+0xc4>
-4000900f: 8b 45 f4 mov -0xc(%ebp),%eax
-40009012: 8b 55 f8 mov -0x8(%ebp),%edx
-40009015: 66 8b 12 mov (%edx),%dx
-40009018: 66 89 10 mov %dx,(%eax)
-4000901b: 83 45 f8 02 addl $0x2,-0x8(%ebp)
-4000901f: 83 45 f4 02 addl $0x2,-0xc(%ebp)
-40009023: ff 4d fc decl -0x4(%ebp)
-40009026: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000902a: 75 e3 jne 4000900f <memcpy+0xa7>
- int result = 1;
-4000902c: 8b 45 10 mov 0x10(%ebp),%eax
-4000902f: 83 e0 01 and $0x1,%eax
-40009032: 89 45 fc mov %eax,-0x4(%ebp)
- struct ata_request request;
-40009035: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40009039: 0f 84 ce 00 00 00 je 4000910d <memcpy+0x1a5>
-4000903f: 8b 45 f8 mov -0x8(%ebp),%eax
-40009042: 8a 10 mov (%eax),%dl
-40009044: 8b 45 f4 mov -0xc(%ebp),%eax
-40009047: 88 10 mov %dl,(%eax)
-40009049: ff 45 f4 incl -0xc(%ebp)
-4000904c: ff 45 f8 incl -0x8(%ebp)
-4000904f: ff 4d fc decl -0x4(%ebp)
-40009052: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40009056: 75 e7 jne 4000903f <memcpy+0xd7>
-40009058: e9 b0 00 00 00 jmp 4000910d <memcpy+0x1a5>
- // muss unter Umstaenden mehrmals gelesen werden.
- uint16_t current_count;
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-4000905d: 8b 45 10 mov 0x10(%ebp),%eax
-40009060: 01 45 f8 add %eax,-0x8(%ebp)
- size_t count_left = count;
-40009063: 8b 45 10 mov 0x10(%ebp),%eax
-40009066: 01 45 f4 add %eax,-0xc(%ebp)
-
-40009069: 8b 45 f8 mov -0x8(%ebp),%eax
-4000906c: 89 45 fc mov %eax,-0x4(%ebp)
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-4000906f: 8b 45 f4 mov -0xc(%ebp),%eax
-40009072: 0b 45 fc or -0x4(%ebp),%eax
-40009075: 83 e0 01 and $0x1,%eax
-40009078: 84 c0 test %al,%al
-4000907a: 74 3e je 400090ba <memcpy+0x152>
- while (count_left > 0) {
-4000907c: 8b 45 f4 mov -0xc(%ebp),%eax
-4000907f: 33 45 fc xor -0x4(%ebp),%eax
-40009082: 83 e0 01 and $0x1,%eax
-40009085: 84 c0 test %al,%al
-40009087: 75 06 jne 4000908f <memcpy+0x127>
-40009089: 83 7d 10 02 cmpl $0x2,0x10(%ebp)
-4000908d: 77 08 ja 40009097 <memcpy+0x12f>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
-4000908f: 8b 45 10 mov 0x10(%ebp),%eax
-40009092: 89 45 fc mov %eax,-0x4(%ebp)
-
- // Anzahl der Sektoren die noch uebrig sind
- size_t count_left = count;
-
- // Solange wie noch Sektoren uebrig sind, wird gelesen
- while (count_left > 0) {
-40009095: eb 04 jmp 4000909b <memcpy+0x133>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
-40009097: 83 65 fc 01 andl $0x1,-0x4(%ebp)
- } else {
-4000909b: 8b 45 fc mov -0x4(%ebp),%eax
-4000909e: 29 45 10 sub %eax,0x10(%ebp)
- current_count = count_left;
-400090a1: ff 4d f4 decl -0xc(%ebp)
-400090a4: ff 4d f8 decl -0x8(%ebp)
-400090a7: 8b 45 f8 mov -0x8(%ebp),%eax
-400090aa: 8a 10 mov (%eax),%dl
-400090ac: 8b 45 f4 mov -0xc(%ebp),%eax
-400090af: 88 10 mov %dl,(%eax)
-400090b1: ff 4d fc decl -0x4(%ebp)
-400090b4: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400090b8: 75 e7 jne 400090a1 <memcpy+0x139>
- }
-
-400090ba: 8b 45 10 mov 0x10(%ebp),%eax
-400090bd: d1 e8 shr %eax
-400090bf: 89 45 fc mov %eax,-0x4(%ebp)
- // Request vorbereiten
-400090c2: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400090c6: 74 1d je 400090e5 <memcpy+0x17d>
-400090c8: 83 6d f8 02 subl $0x2,-0x8(%ebp)
-400090cc: 83 6d f4 02 subl $0x2,-0xc(%ebp)
-400090d0: 8b 45 f4 mov -0xc(%ebp),%eax
-400090d3: 8b 55 f8 mov -0x8(%ebp),%edx
-400090d6: 66 8b 12 mov (%edx),%dx
-400090d9: 66 89 10 mov %dx,(%eax)
-400090dc: ff 4d fc decl -0x4(%ebp)
-400090df: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400090e3: 75 e3 jne 400090c8 <memcpy+0x160>
- request.dev = dev;
-400090e5: 8b 45 10 mov 0x10(%ebp),%eax
-400090e8: 83 e0 01 and $0x1,%eax
-400090eb: 89 45 fc mov %eax,-0x4(%ebp)
- // TODO: DMA, UltraDMA...
-400090ee: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400090f2: 74 19 je 4000910d <memcpy+0x1a5>
-400090f4: ff 4d f4 decl -0xc(%ebp)
-400090f7: ff 4d f8 decl -0x8(%ebp)
-400090fa: 8b 45 f8 mov -0x8(%ebp),%eax
-400090fd: 8a 10 mov (%eax),%dl
-400090ff: 8b 45 f4 mov -0xc(%ebp),%eax
-40009102: 88 10 mov %dl,(%eax)
-40009104: ff 4d fc decl -0x4(%ebp)
-40009107: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-4000910b: 75 e7 jne 400090f4 <memcpy+0x18c>
- request.protocol = PIO;
- request.flags.direction = READ;
- // FIXME
- request.flags.poll = 1;
-4000910d: 8b 45 08 mov 0x8(%ebp),%eax
- request.flags.ata = 0;
- request.flags.lba = 1;
-
- request.registers.ata.command = READ_SECTORS;
-40009110: c9 leave
-40009111: c3 ret
-40009112: 90 nop
-40009113: 90 nop
-
-40009114 <memset>:
- uint8_t buffer[ATA_SECTOR_SIZE];
-
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
-40009114: 55 push %ebp
-40009115: 89 e5 mov %esp,%ebp
-40009117: 83 ec 14 sub $0x14,%esp
- .flags.poll = 1,
- .flags.lba = 0,
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
-4000911a: 8b 45 08 mov 0x8(%ebp),%eax
-4000911d: 89 45 fc mov %eax,-0x4(%ebp)
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
-40009120: 83 7d 10 0b cmpl $0xb,0x10(%ebp)
-40009124: 77 23 ja 40009149 <memset+0x35>
- // Ein ATA-Geraet
-40009126: eb 10 jmp 40009138 <memset+0x24>
- dev->atapi = 0;
-40009128: 8b 45 0c mov 0xc(%ebp),%eax
-4000912b: 88 c2 mov %al,%dl
-4000912d: 8b 45 fc mov -0x4(%ebp),%eax
-40009130: 88 10 mov %dl,(%eax)
-40009132: ff 45 fc incl -0x4(%ebp)
-
-40009135: ff 4d 10 decl 0x10(%ebp)
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
- }
-
- // Ein ATA-Geraet
-40009138: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-4000913c: 75 ea jne 40009128 <memset+0x14>
- dev->atapi = 0;
-
- // TODO: Informationen verarbeiten
-
-4000913e: 8b 45 08 mov 0x8(%ebp),%eax
-40009141: 89 45 ec mov %eax,-0x14(%ebp)
-40009144: e9 a0 00 00 00 jmp 400091e9 <memset+0xd5>
- return 1;
-}
-
-/**
-40009149: 8b 45 0c mov 0xc(%ebp),%eax
-4000914c: 0f b6 c0 movzbl %al,%eax
-4000914f: 89 45 f8 mov %eax,-0x8(%ebp)
-40009152: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40009156: 74 12 je 4000916a <memset+0x56>
- * Sektoren von einem ATA-Geraet lesen
-40009158: 8b 45 f8 mov -0x8(%ebp),%eax
-4000915b: c1 e0 08 shl $0x8,%eax
-4000915e: 09 45 f8 or %eax,-0x8(%ebp)
- *
- * @param start LBA des Startsektors
-40009161: 8b 45 f8 mov -0x8(%ebp),%eax
-40009164: c1 e0 10 shl $0x10,%eax
-40009167: 09 45 f8 or %eax,-0x8(%ebp)
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-{
-4000916a: 8b 45 fc mov -0x4(%ebp),%eax
-4000916d: 83 e0 03 and $0x3,%eax
-40009170: 89 45 f4 mov %eax,-0xc(%ebp)
-40009173: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-40009177: 74 27 je 400091a0 <memset+0x8c>
- int result = 1;
-40009179: b8 04 00 00 00 mov $0x4,%eax
-4000917e: 2b 45 f4 sub -0xc(%ebp),%eax
-40009181: 89 45 f4 mov %eax,-0xc(%ebp)
- struct ata_request request;
-40009184: 8b 45 f4 mov -0xc(%ebp),%eax
-40009187: 29 45 10 sub %eax,0x10(%ebp)
- // Da nicht mehr als 256 Sektoren auf einmal gelesen werden koennen,
- // muss unter Umstaenden mehrmals gelesen werden.
-4000918a: 8b 45 0c mov 0xc(%ebp),%eax
-4000918d: 88 c2 mov %al,%dl
-4000918f: 8b 45 fc mov -0x4(%ebp),%eax
-40009192: 88 10 mov %dl,(%eax)
-40009194: ff 45 fc incl -0x4(%ebp)
- uint16_t current_count;
-40009197: ff 4d f4 decl -0xc(%ebp)
-4000919a: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-4000919e: 75 ea jne 4000918a <memset+0x76>
- void* current_buffer = buffer;
- uint64_t lba = start;
-
- // Anzahl der Sektoren die noch uebrig sind
-400091a0: 8b 45 10 mov 0x10(%ebp),%eax
-400091a3: c1 e8 02 shr $0x2,%eax
-400091a6: 89 45 f4 mov %eax,-0xc(%ebp)
- size_t count_left = count;
-
-400091a9: 8b 55 fc mov -0x4(%ebp),%edx
-400091ac: 8b 45 f8 mov -0x8(%ebp),%eax
-400091af: 89 02 mov %eax,(%edx)
- // Solange wie noch Sektoren uebrig sind, wird gelesen
-400091b1: 83 45 fc 04 addl $0x4,-0x4(%ebp)
- while (count_left > 0) {
-400091b5: ff 4d f4 decl -0xc(%ebp)
-400091b8: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400091bc: 75 eb jne 400091a9 <memset+0x95>
- // Entscheiden wieviele Sektoren im aktuellen Durchlauf gelesen werden
- if (count_left > 256) {
- current_count = 256;
-400091be: 8b 45 10 mov 0x10(%ebp),%eax
-400091c1: 83 e0 03 and $0x3,%eax
-400091c4: 89 45 f4 mov %eax,-0xc(%ebp)
- } else {
-400091c7: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400091cb: 74 16 je 400091e3 <memset+0xcf>
- current_count = count_left;
- }
-400091cd: 8b 45 0c mov 0xc(%ebp),%eax
-400091d0: 88 c2 mov %al,%dl
-400091d2: 8b 45 fc mov -0x4(%ebp),%eax
-400091d5: 88 10 mov %dl,(%eax)
-400091d7: ff 45 fc incl -0x4(%ebp)
-
-400091da: ff 4d f4 decl -0xc(%ebp)
-400091dd: 83 7d f4 00 cmpl $0x0,-0xc(%ebp)
-400091e1: 75 ea jne 400091cd <memset+0xb9>
- // Request vorbereiten
-400091e3: 8b 45 08 mov 0x8(%ebp),%eax
-400091e6: 89 45 ec mov %eax,-0x14(%ebp)
-400091e9: 8b 45 ec mov -0x14(%ebp),%eax
- request.dev = dev;
-400091ec: c9 leave
-400091ed: c3 ret
-400091ee: 90 nop
-400091ef: 90 nop
-
-400091f0 <strcmp>:
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-400091f0: 55 push %ebp
-400091f1: 89 e5 mov %esp,%ebp
-400091f3: 83 ec 04 sub $0x4,%esp
-
-400091f6: eb 1a jmp 40009212 <strcmp+0x22>
-#include "device.h"
-400091f8: 8b 45 08 mov 0x8(%ebp),%eax
-400091fb: 8a 00 mov (%eax),%al
-400091fd: 84 c0 test %al,%al
-400091ff: 0f 94 c0 sete %al
-40009202: ff 45 08 incl 0x8(%ebp)
-40009205: 84 c0 test %al,%al
-40009207: 74 09 je 40009212 <strcmp+0x22>
-
-40009209: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40009210: eb 2e jmp 40009240 <strcmp+0x50>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-
-40009212: 8b 45 08 mov 0x8(%ebp),%eax
-40009215: 8a 10 mov (%eax),%dl
-40009217: 8b 45 0c mov 0xc(%ebp),%eax
-4000921a: 8a 00 mov (%eax),%al
-4000921c: 38 c2 cmp %al,%dl
-4000921e: 0f 94 c0 sete %al
-40009221: ff 45 0c incl 0xc(%ebp)
-40009224: 84 c0 test %al,%al
-40009226: 75 d0 jne 400091f8 <strcmp+0x8>
-#include "device.h"
-
-
-40009228: 8b 45 08 mov 0x8(%ebp),%eax
-4000922b: 8a 00 mov (%eax),%al
-4000922d: 0f b6 d0 movzbl %al,%edx
-40009230: 8b 45 0c mov 0xc(%ebp),%eax
-40009233: 48 dec %eax
-40009234: 8a 00 mov (%eax),%al
-40009236: 0f b6 c0 movzbl %al,%eax
-40009239: 89 d1 mov %edx,%ecx
-4000923b: 29 c1 sub %eax,%ecx
-4000923d: 89 4d fc mov %ecx,-0x4(%ebp)
-40009240: 8b 45 fc mov -0x4(%ebp),%eax
-/**
-40009243: c9 leave
-40009244: c3 ret
-40009245: 90 nop
-40009246: 90 nop
-40009247: 90 nop
-
-40009248 <strcpy>:
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-40009248: 55 push %ebp
-40009249: 89 e5 mov %esp,%ebp
-4000924b: 83 ec 10 sub $0x10,%esp
-#include <stdio.h>
-4000924e: 8b 45 08 mov 0x8(%ebp),%eax
-40009251: 89 45 fc mov %eax,-0x4(%ebp)
-#include <stdlib.h>
-
-40009254: eb 06 jmp 4000925c <strcpy+0x14>
-40009256: ff 45 0c incl 0xc(%ebp)
-40009259: ff 45 08 incl 0x8(%ebp)
-4000925c: 8b 45 0c mov 0xc(%ebp),%eax
-4000925f: 8a 10 mov (%eax),%dl
-40009261: 8b 45 08 mov 0x8(%ebp),%eax
-40009264: 88 10 mov %dl,(%eax)
-40009266: 8b 45 08 mov 0x8(%ebp),%eax
-40009269: 8a 00 mov (%eax),%al
-4000926b: 84 c0 test %al,%al
-4000926d: 75 e7 jne 40009256 <strcpy+0xe>
-#include "cdi.h"
-4000926f: 8b 45 fc mov -0x4(%ebp),%eax
-#include "cdi/storage.h"
-40009272: c9 leave
-40009273: c3 ret
-
-40009274 <strlen>:
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-40009274: 55 push %ebp
-40009275: 89 e5 mov %esp,%ebp
-40009277: 83 ec 10 sub $0x10,%esp
-#include <stdlib.h>
-
-#include "cdi.h"
-4000927a: 8b 45 08 mov 0x8(%ebp),%eax
-4000927d: 89 45 fc mov %eax,-0x4(%ebp)
-40009280: eb 03 jmp 40009285 <strlen+0x11>
-40009282: ff 45 fc incl -0x4(%ebp)
-40009285: 8b 45 fc mov -0x4(%ebp),%eax
-40009288: 8a 00 mov (%eax),%al
-4000928a: 84 c0 test %al,%al
-4000928c: 75 f4 jne 40009282 <strlen+0xe>
-#include "cdi/storage.h"
-4000928e: 8b 55 fc mov -0x4(%ebp),%edx
-40009291: 8b 45 08 mov 0x8(%ebp),%eax
-40009294: 89 d1 mov %edx,%ecx
-40009296: 29 c1 sub %eax,%ecx
-40009298: 89 c8 mov %ecx,%eax
-#include "cdi/misc.h"
-4000929a: c9 leave
-4000929b: c3 ret
-
-4000929c <strncmp>:
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-4000929c: 55 push %ebp
-4000929d: 89 e5 mov %esp,%ebp
-4000929f: 83 ec 04 sub $0x4,%esp
-
-#include "cdi.h"
-400092a2: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-400092a6: 75 09 jne 400092b1 <strncmp+0x15>
-#include "cdi/storage.h"
-400092a8: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-400092af: eb 51 jmp 40009302 <strncmp+0x66>
-#include "cdi/misc.h"
-#include "cdi/io.h"
-400092b1: 8b 45 08 mov 0x8(%ebp),%eax
-400092b4: 8a 10 mov (%eax),%dl
-400092b6: 8b 45 0c mov 0xc(%ebp),%eax
-400092b9: 8a 00 mov (%eax),%al
-400092bb: 38 c2 cmp %al,%dl
-400092bd: 0f 95 c0 setne %al
-400092c0: ff 45 0c incl 0xc(%ebp)
-400092c3: 84 c0 test %al,%al
-400092c5: 74 1a je 400092e1 <strncmp+0x45>
-
-400092c7: 8b 45 08 mov 0x8(%ebp),%eax
-400092ca: 8a 00 mov (%eax),%al
-400092cc: 0f b6 d0 movzbl %al,%edx
-400092cf: 8b 45 0c mov 0xc(%ebp),%eax
-400092d2: 48 dec %eax
-400092d3: 8a 00 mov (%eax),%al
-400092d5: 0f b6 c0 movzbl %al,%eax
-400092d8: 89 d1 mov %edx,%ecx
-400092da: 29 c1 sub %eax,%ecx
-400092dc: 89 4d fc mov %ecx,-0x4(%ebp)
-400092df: eb 21 jmp 40009302 <strncmp+0x66>
-#include "device.h"
-
-400092e1: 8b 45 08 mov 0x8(%ebp),%eax
-400092e4: 8a 00 mov (%eax),%al
-400092e6: 84 c0 test %al,%al
-400092e8: 0f 94 c0 sete %al
-400092eb: ff 45 08 incl 0x8(%ebp)
-400092ee: 84 c0 test %al,%al
-400092f0: 75 09 jne 400092fb <strncmp+0x5f>
-
-/**
-400092f2: ff 4d 10 decl 0x10(%ebp)
-400092f5: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-400092f9: 75 b6 jne 400092b1 <strncmp+0x15>
- * ATA-Geraet identifizieren
-400092fb: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
-40009302: 8b 45 fc mov -0x4(%ebp),%eax
- *
-40009305: c9 leave
-40009306: c3 ret
-40009307: 90 nop
-
-40009308 <strncpy>:
-#include <stdlib.h>
-
-#include "cdi.h"
-#include "cdi/storage.h"
-#include "cdi/misc.h"
-#include "cdi/io.h"
-40009308: 55 push %ebp
-40009309: 89 e5 mov %esp,%ebp
-4000930b: 83 ec 10 sub $0x10,%esp
-
-4000930e: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-40009312: 74 49 je 4000935d <strncpy+0x55>
-#include "device.h"
-40009314: 8b 45 08 mov 0x8(%ebp),%eax
-40009317: 89 45 f8 mov %eax,-0x8(%ebp)
-
-4000931a: 8b 45 0c mov 0xc(%ebp),%eax
-4000931d: 89 45 fc mov %eax,-0x4(%ebp)
-
-/**
- * ATA-Geraet identifizieren
-40009320: 8b 45 fc mov -0x4(%ebp),%eax
-40009323: 8a 10 mov (%eax),%dl
-40009325: 8b 45 f8 mov -0x8(%ebp),%eax
-40009328: 88 10 mov %dl,(%eax)
-4000932a: 8b 45 f8 mov -0x8(%ebp),%eax
-4000932d: 8a 00 mov (%eax),%al
-4000932f: 84 c0 test %al,%al
-40009331: 0f 94 c0 sete %al
-40009334: ff 45 f8 incl -0x8(%ebp)
-40009337: ff 45 fc incl -0x4(%ebp)
-4000933a: 84 c0 test %al,%al
-4000933c: 74 16 je 40009354 <strncpy+0x4c>
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-4000933e: eb 09 jmp 40009349 <strncpy+0x41>
- */
-40009340: 8b 45 f8 mov -0x8(%ebp),%eax
-40009343: c6 00 00 movb $0x0,(%eax)
-40009346: ff 45 f8 incl -0x8(%ebp)
-
-
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-40009349: ff 4d 10 decl 0x10(%ebp)
-4000934c: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-40009350: 75 ee jne 40009340 <strncpy+0x38>
- */
-int ata_drv_identify(struct ata_device* dev)
-40009352: eb 09 jmp 4000935d <strncpy+0x55>
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-40009354: ff 4d 10 decl 0x10(%ebp)
-40009357: 83 7d 10 00 cmpl $0x0,0x10(%ebp)
-4000935b: 75 c3 jne 40009320 <strncpy+0x18>
-
- // Request vorbereiten
-4000935d: 8b 45 08 mov 0x8(%ebp),%eax
- struct ata_request request = {
-40009360: c9 leave
-40009361: c3 ret
-40009362: 90 nop
-40009363: 90 nop
-
-40009364 <__strtok_r>:
-
-
-/**
- * ATA-Geraet identifizieren
- *
- * @return 0 Wenn das Geraet erfolgreich identifiziert wurde, != 0 sonst
-40009364: 55 push %ebp
-40009365: 89 e5 mov %esp,%ebp
-40009367: 83 ec 14 sub $0x14,%esp
- */
-int ata_drv_identify(struct ata_device* dev)
-{
- uint8_t buffer[ATA_SECTOR_SIZE];
-4000936a: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-4000936e: 75 1a jne 4000938a <__strtok_r+0x26>
-40009370: 8b 45 10 mov 0x10(%ebp),%eax
-40009373: 8b 00 mov (%eax),%eax
-40009375: 89 45 08 mov %eax,0x8(%ebp)
-40009378: 83 7d 08 00 cmpl $0x0,0x8(%ebp)
-4000937c: 75 0c jne 4000938a <__strtok_r+0x26>
-
-4000937e: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-40009385: e9 b3 00 00 00 jmp 4000943d <__strtok_r+0xd9>
- // Request vorbereiten
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
-4000938a: 8b 45 08 mov 0x8(%ebp),%eax
-4000938d: 8a 00 mov (%eax),%al
-4000938f: 0f be c0 movsbl %al,%eax
-40009392: 89 45 f8 mov %eax,-0x8(%ebp)
-40009395: ff 45 08 incl 0x8(%ebp)
- .flags.lba = 0,
-40009398: 8b 45 0c mov 0xc(%ebp),%eax
-4000939b: 89 45 f0 mov %eax,-0x10(%ebp)
-4000939e: eb 08 jmp 400093a8 <__strtok_r+0x44>
-
-400093a0: 8b 45 f8 mov -0x8(%ebp),%eax
-400093a3: 3b 45 fc cmp -0x4(%ebp),%eax
-400093a6: 74 e2 je 4000938a <__strtok_r+0x26>
- struct ata_request request = {
- .dev = dev,
-
- .flags.direction = READ,
- .flags.poll = 1,
- .flags.lba = 0,
-400093a8: 8b 45 f0 mov -0x10(%ebp),%eax
-400093ab: 8a 00 mov (%eax),%al
-400093ad: 0f be c0 movsbl %al,%eax
-400093b0: 89 45 fc mov %eax,-0x4(%ebp)
-400093b3: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-400093b7: 0f 95 c0 setne %al
-400093ba: ff 45 f0 incl -0x10(%ebp)
-400093bd: 84 c0 test %al,%al
-400093bf: 75 df jne 400093a0 <__strtok_r+0x3c>
-
- // Die Identifikationsdaten werden ueber PIO DATA IN gelesen
- .protocol = PIO,
- .registers.ata.command = IDENTIFY_DEVICE,
- .block_count = 1,
-400093c1: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-400093c5: 75 12 jne 400093d9 <__strtok_r+0x75>
- .block_size = ATA_SECTOR_SIZE,
-400093c7: 8b 45 10 mov 0x10(%ebp),%eax
-400093ca: c7 00 00 00 00 00 movl $0x0,(%eax)
- .buffer = buffer,
-400093d0: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%ebp)
-400093d7: eb 64 jmp 4000943d <__strtok_r+0xd9>
-
- .error = 0
-400093d9: 8b 45 08 mov 0x8(%ebp),%eax
-400093dc: 48 dec %eax
-400093dd: 89 45 f4 mov %eax,-0xc(%ebp)
-
- // Request starten
- if (!ata_request(&request)) {
- // Wenn ein Fehler aufgetreten ist, koennen wir es noch mit einem
- // IDENTIFY PACKET DEVICE probieren.
- return atapi_drv_identify(dev);
-400093e0: 8b 45 08 mov 0x8(%ebp),%eax
-400093e3: 8a 00 mov (%eax),%al
-400093e5: 0f be c0 movsbl %al,%eax
-400093e8: 89 45 f8 mov %eax,-0x8(%ebp)
-400093eb: ff 45 08 incl 0x8(%ebp)
- }
-400093ee: 8b 45 0c mov 0xc(%ebp),%eax
-400093f1: 89 45 f0 mov %eax,-0x10(%ebp)
-
- // Ein ATA-Geraet
-400093f4: 8b 45 f0 mov -0x10(%ebp),%eax
-400093f7: 8a 00 mov (%eax),%al
-400093f9: 0f be c0 movsbl %al,%eax
-400093fc: 89 45 fc mov %eax,-0x4(%ebp)
-400093ff: 8b 45 fc mov -0x4(%ebp),%eax
-40009402: 3b 45 f8 cmp -0x8(%ebp),%eax
-40009405: 0f 94 c0 sete %al
-40009408: ff 45 f0 incl -0x10(%ebp)
-4000940b: 84 c0 test %al,%al
-4000940d: 74 26 je 40009435 <__strtok_r+0xd1>
- dev->atapi = 0;
-4000940f: 83 7d f8 00 cmpl $0x0,-0x8(%ebp)
-40009413: 75 09 jne 4000941e <__strtok_r+0xba>
-
-40009415: c7 45 08 00 00 00 00 movl $0x0,0x8(%ebp)
-4000941c: eb 07 jmp 40009425 <__strtok_r+0xc1>
- // TODO: Informationen verarbeiten
-
-4000941e: 8b 45 08 mov 0x8(%ebp),%eax
-40009421: 48 dec %eax
-40009422: c6 00 00 movb $0x0,(%eax)
- return 1;
-40009425: 8b 55 10 mov 0x10(%ebp),%edx
-40009428: 8b 45 08 mov 0x8(%ebp),%eax
-4000942b: 89 02 mov %eax,(%edx)
-}
-4000942d: 8b 45 f4 mov -0xc(%ebp),%eax
-40009430: 89 45 ec mov %eax,-0x14(%ebp)
-40009433: eb 08 jmp 4000943d <__strtok_r+0xd9>
-
-/**
-40009435: 83 7d fc 00 cmpl $0x0,-0x4(%ebp)
-40009439: 75 b9 jne 400093f4 <__strtok_r+0x90>
- * Sektoren von einem ATA-Geraet lesen
-4000943b: eb a3 jmp 400093e0 <__strtok_r+0x7c>
-4000943d: 8b 45 ec mov -0x14(%ebp),%eax
- *
- * @param start LBA des Startsektors
-40009440: c9 leave
-40009441: c3 ret
-
-40009442 <strtok>:
- * @param count Anzahl der Sektoren
- * @param buffer Pointer auf den Puffer in dem die Daten abgelegt werden sollen
- *
- * @return 1 wenn die Blocks erfolgreich gelesen wurden, 0 sonst
-40009442: 55 push %ebp
-40009443: 89 e5 mov %esp,%ebp
- */
-int ata_drv_read_sectors(struct ata_device* dev, uint64_t start, size_t count,
- void* buffer)
-40009445: 68 54 a6 00 40 push $0x4000a654
-4000944a: ff 75 0c pushl 0xc(%ebp)
-4000944d: ff 75 08 pushl 0x8(%ebp)
-40009450: e8 0f ff ff ff call 40009364 <__strtok_r>
-40009455: 83 c4 0c add $0xc,%esp
-{
-40009458: c9 leave
-40009459: c3 ret
-4000945a: 90 nop
-4000945b: 90 nop
-
-4000945c <__udivdi3>:
-4000945c: 55 push %ebp
-4000945d: 89 e5 mov %esp,%ebp
-4000945f: 57 push %edi
-40009460: 56 push %esi
-40009461: 83 ec 20 sub $0x20,%esp
-40009464: c7 45 e0 00 00 00 00 movl $0x0,-0x20(%ebp)
-4000946b: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%ebp)
-40009472: 8b 45 10 mov 0x10(%ebp),%eax
-40009475: 8b 55 14 mov 0x14(%ebp),%edx
-40009478: 89 45 f4 mov %eax,-0xc(%ebp)
-4000947b: 89 c1 mov %eax,%ecx
-4000947d: 89 d7 mov %edx,%edi
-4000947f: 8b 45 08 mov 0x8(%ebp),%eax
-40009482: 89 45 ec mov %eax,-0x14(%ebp)
-40009485: 8b 75 0c mov 0xc(%ebp),%esi
-40009488: 85 d2 test %edx,%edx
-4000948a: 75 20 jne 400094ac <__udivdi3+0x50>
-4000948c: 39 f1 cmp %esi,%ecx
-4000948e: 76 48 jbe 400094d8 <__udivdi3+0x7c>
-40009490: 89 f2 mov %esi,%edx
-40009492: f7 f1 div %ecx
-40009494: 89 c1 mov %eax,%ecx
-40009496: 31 c0 xor %eax,%eax
-40009498: 89 4d e0 mov %ecx,-0x20(%ebp)
-4000949b: 89 45 e4 mov %eax,-0x1c(%ebp)
-4000949e: 8b 45 e0 mov -0x20(%ebp),%eax
-400094a1: 8b 55 e4 mov -0x1c(%ebp),%edx
-400094a4: 83 c4 20 add $0x20,%esp
-400094a7: 5e pop %esi
-400094a8: 5f pop %edi
-400094a9: c9 leave
-400094aa: c3 ret
-400094ab: 90 nop
-400094ac: 39 f2 cmp %esi,%edx
-400094ae: 0f 87 ac 00 00 00 ja 40009560 <__udivdi3+0x104>
-400094b4: 0f bd c2 bsr %edx,%eax
-400094b7: 83 f0 1f xor $0x1f,%eax
-400094ba: 89 45 e8 mov %eax,-0x18(%ebp)
-400094bd: 75 41 jne 40009500 <__udivdi3+0xa4>
-400094bf: 39 f2 cmp %esi,%edx
-400094c1: 72 0c jb 400094cf <__udivdi3+0x73>
-400094c3: 8b 55 ec mov -0x14(%ebp),%edx
-400094c6: 39 55 f4 cmp %edx,-0xc(%ebp)
-400094c9: 0f 87 91 00 00 00 ja 40009560 <__udivdi3+0x104>
-400094cf: b9 01 00 00 00 mov $0x1,%ecx
-400094d4: 31 c0 xor %eax,%eax
-400094d6: eb c0 jmp 40009498 <__udivdi3+0x3c>
-400094d8: 8b 45 f4 mov -0xc(%ebp),%eax
-400094db: 85 c0 test %eax,%eax
-400094dd: 75 0c jne 400094eb <__udivdi3+0x8f>
-400094df: b8 01 00 00 00 mov $0x1,%eax
-400094e4: 31 d2 xor %edx,%edx
-400094e6: f7 75 f4 divl -0xc(%ebp)
-400094e9: 89 c1 mov %eax,%ecx
-400094eb: 89 f0 mov %esi,%eax
-400094ed: 89 fa mov %edi,%edx
-400094ef: f7 f1 div %ecx
-400094f1: 89 c6 mov %eax,%esi
-400094f3: 8b 45 ec mov -0x14(%ebp),%eax
-400094f6: f7 f1 div %ecx
-400094f8: 89 c1 mov %eax,%ecx
-400094fa: 89 f0 mov %esi,%eax
-400094fc: eb 9a jmp 40009498 <__udivdi3+0x3c>
-400094fe: 89 f6 mov %esi,%esi
-40009500: b8 20 00 00 00 mov $0x20,%eax
-40009505: 2b 45 e8 sub -0x18(%ebp),%eax
-40009508: 89 45 f0 mov %eax,-0x10(%ebp)
-4000950b: 8b 55 f4 mov -0xc(%ebp),%edx
-4000950e: 8a 4d f0 mov -0x10(%ebp),%cl
-40009511: d3 ea shr %cl,%edx
-40009513: 89 f8 mov %edi,%eax
-40009515: 8a 4d e8 mov -0x18(%ebp),%cl
-40009518: d3 e0 shl %cl,%eax
-4000951a: 09 c2 or %eax,%edx
-4000951c: 89 55 dc mov %edx,-0x24(%ebp)
-4000951f: 8b 7d f4 mov -0xc(%ebp),%edi
-40009522: d3 e7 shl %cl,%edi
-40009524: 8b 45 ec mov -0x14(%ebp),%eax
-40009527: 8a 4d f0 mov -0x10(%ebp),%cl
-4000952a: d3 e8 shr %cl,%eax
-4000952c: 89 f2 mov %esi,%edx
-4000952e: 8a 4d e8 mov -0x18(%ebp),%cl
-40009531: d3 e2 shl %cl,%edx
-40009533: 09 d0 or %edx,%eax
-40009535: 8a 4d f0 mov -0x10(%ebp),%cl
-40009538: d3 ee shr %cl,%esi
-4000953a: 89 75 d8 mov %esi,-0x28(%ebp)
-4000953d: 89 f2 mov %esi,%edx
-4000953f: f7 75 dc divl -0x24(%ebp)
-40009542: 89 d1 mov %edx,%ecx
-40009544: 89 45 d8 mov %eax,-0x28(%ebp)
-40009547: f7 e7 mul %edi
-40009549: 89 c6 mov %eax,%esi
-4000954b: 39 d1 cmp %edx,%ecx
-4000954d: 72 29 jb 40009578 <__udivdi3+0x11c>
-4000954f: 39 ca cmp %ecx,%edx
-40009551: 74 16 je 40009569 <__udivdi3+0x10d>
-40009553: 8b 4d d8 mov -0x28(%ebp),%ecx
-40009556: 31 c0 xor %eax,%eax
-40009558: e9 3b ff ff ff jmp 40009498 <__udivdi3+0x3c>
-4000955d: 8d 76 00 lea 0x0(%esi),%esi
-40009560: 31 c9 xor %ecx,%ecx
-40009562: 31 c0 xor %eax,%eax
-40009564: e9 2f ff ff ff jmp 40009498 <__udivdi3+0x3c>
-40009569: 8b 45 ec mov -0x14(%ebp),%eax
-4000956c: 8a 4d e8 mov -0x18(%ebp),%cl
-4000956f: d3 e0 shl %cl,%eax
-40009571: 39 f0 cmp %esi,%eax
-40009573: 73 de jae 40009553 <__udivdi3+0xf7>
-40009575: 8d 76 00 lea 0x0(%esi),%esi
-40009578: 8b 4d d8 mov -0x28(%ebp),%ecx
-4000957b: 49 dec %ecx
-4000957c: 31 c0 xor %eax,%eax
-4000957e: e9 15 ff ff ff jmp 40009498 <__udivdi3+0x3c>
-40009583: 90 nop
-
-40009584 <__umoddi3>:
-40009584: 55 push %ebp
-40009585: 89 e5 mov %esp,%ebp
-40009587: 57 push %edi
-40009588: 56 push %esi
-40009589: 83 ec 30 sub $0x30,%esp
-4000958c: c7 45 d0 00 00 00 00 movl $0x0,-0x30(%ebp)
-40009593: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
-4000959a: 8b 75 08 mov 0x8(%ebp),%esi
-4000959d: 8b 7d 0c mov 0xc(%ebp),%edi
-400095a0: 8b 45 10 mov 0x10(%ebp),%eax
-400095a3: 8b 55 14 mov 0x14(%ebp),%edx
-400095a6: 89 45 ec mov %eax,-0x14(%ebp)
-400095a9: 89 c1 mov %eax,%ecx
-400095ab: 89 55 e8 mov %edx,-0x18(%ebp)
-400095ae: 89 75 e4 mov %esi,-0x1c(%ebp)
-400095b1: 89 75 f0 mov %esi,-0x10(%ebp)
-400095b4: 89 7d e0 mov %edi,-0x20(%ebp)
-400095b7: 89 fa mov %edi,%edx
-400095b9: 8b 45 e8 mov -0x18(%ebp),%eax
-400095bc: 85 c0 test %eax,%eax
-400095be: 75 14 jne 400095d4 <__umoddi3+0x50>
-400095c0: 39 f9 cmp %edi,%ecx
-400095c2: 76 68 jbe 4000962c <__umoddi3+0xa8>
-400095c4: 89 f0 mov %esi,%eax
-400095c6: f7 f1 div %ecx
-400095c8: 89 55 d0 mov %edx,-0x30(%ebp)
-400095cb: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
-400095d2: eb 10 jmp 400095e4 <__umoddi3+0x60>
-400095d4: 8b 4d e0 mov -0x20(%ebp),%ecx
-400095d7: 39 4d e8 cmp %ecx,-0x18(%ebp)
-400095da: 76 18 jbe 400095f4 <__umoddi3+0x70>
-400095dc: 89 75 d0 mov %esi,-0x30(%ebp)
-400095df: 89 7d d4 mov %edi,-0x2c(%ebp)
-400095e2: 89 f6 mov %esi,%esi
-400095e4: 8b 45 d0 mov -0x30(%ebp),%eax
-400095e7: 8b 55 d4 mov -0x2c(%ebp),%edx
-400095ea: 83 c4 30 add $0x30,%esp
-400095ed: 5e pop %esi
-400095ee: 5f pop %edi
-400095ef: c9 leave
-400095f0: c3 ret
-400095f1: 8d 76 00 lea 0x0(%esi),%esi
-400095f4: 0f bd 45 e8 bsr -0x18(%ebp),%eax
-400095f8: 83 f0 1f xor $0x1f,%eax
-400095fb: 89 45 d8 mov %eax,-0x28(%ebp)
-400095fe: 75 54 jne 40009654 <__umoddi3+0xd0>
-40009600: 8b 45 e0 mov -0x20(%ebp),%eax
-40009603: 39 45 e8 cmp %eax,-0x18(%ebp)
-40009606: 72 08 jb 40009610 <__umoddi3+0x8c>
-40009608: 8b 4d e4 mov -0x1c(%ebp),%ecx
-4000960b: 39 4d ec cmp %ecx,-0x14(%ebp)
-4000960e: 77 0f ja 4000961f <__umoddi3+0x9b>
-40009610: 8b 55 e0 mov -0x20(%ebp),%edx
-40009613: 8b 45 e4 mov -0x1c(%ebp),%eax
-40009616: 2b 45 ec sub -0x14(%ebp),%eax
-40009619: 1b 55 e8 sbb -0x18(%ebp),%edx
-4000961c: 89 45 f0 mov %eax,-0x10(%ebp)
-4000961f: 8b 4d f0 mov -0x10(%ebp),%ecx
-40009622: 89 4d d0 mov %ecx,-0x30(%ebp)
-40009625: 89 55 d4 mov %edx,-0x2c(%ebp)
-40009628: eb ba jmp 400095e4 <__umoddi3+0x60>
-4000962a: 89 f6 mov %esi,%esi
-4000962c: 8b 45 ec mov -0x14(%ebp),%eax
-4000962f: 85 c0 test %eax,%eax
-40009631: 75 0c jne 4000963f <__umoddi3+0xbb>
-40009633: b8 01 00 00 00 mov $0x1,%eax
-40009638: 31 d2 xor %edx,%edx
-4000963a: f7 75 ec divl -0x14(%ebp)
-4000963d: 89 c1 mov %eax,%ecx
-4000963f: 8b 45 e0 mov -0x20(%ebp),%eax
-40009642: 8b 55 e8 mov -0x18(%ebp),%edx
-40009645: f7 f1 div %ecx
-40009647: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000964a: f7 f1 div %ecx
-4000964c: e9 77 ff ff ff jmp 400095c8 <__umoddi3+0x44>
-40009651: 8d 76 00 lea 0x0(%esi),%esi
-40009654: b8 20 00 00 00 mov $0x20,%eax
-40009659: 2b 45 d8 sub -0x28(%ebp),%eax
-4000965c: 89 45 dc mov %eax,-0x24(%ebp)
-4000965f: 8b 55 ec mov -0x14(%ebp),%edx
-40009662: 8a 4d dc mov -0x24(%ebp),%cl
-40009665: d3 ea shr %cl,%edx
-40009667: 8b 45 e8 mov -0x18(%ebp),%eax
-4000966a: 8a 4d d8 mov -0x28(%ebp),%cl
-4000966d: d3 e0 shl %cl,%eax
-4000966f: 09 c2 or %eax,%edx
-40009671: 89 55 f4 mov %edx,-0xc(%ebp)
-40009674: 8b 7d ec mov -0x14(%ebp),%edi
-40009677: d3 e7 shl %cl,%edi
-40009679: 8b 45 e4 mov -0x1c(%ebp),%eax
-4000967c: 8a 4d dc mov -0x24(%ebp),%cl
-4000967f: d3 e8 shr %cl,%eax
-40009681: 8b 55 e0 mov -0x20(%ebp),%edx
-40009684: 8a 4d d8 mov -0x28(%ebp),%cl
-40009687: d3 e2 shl %cl,%edx
-40009689: 09 d0 or %edx,%eax
-4000968b: 8b 75 e4 mov -0x1c(%ebp),%esi
-4000968e: d3 e6 shl %cl,%esi
-40009690: 8b 55 e0 mov -0x20(%ebp),%edx
-40009693: 8a 4d dc mov -0x24(%ebp),%cl
-40009696: d3 ea shr %cl,%edx
-40009698: f7 75 f4 divl -0xc(%ebp)
-4000969b: 89 55 cc mov %edx,-0x34(%ebp)
-4000969e: f7 e7 mul %edi
-400096a0: 39 55 cc cmp %edx,-0x34(%ebp)
-400096a3: 72 37 jb 400096dc <__umoddi3+0x158>
-400096a5: 3b 55 cc cmp -0x34(%ebp),%edx
-400096a8: 74 2e je 400096d8 <__umoddi3+0x154>
-400096aa: 8b 4d cc mov -0x34(%ebp),%ecx
-400096ad: 29 c6 sub %eax,%esi
-400096af: 19 d1 sbb %edx,%ecx
-400096b1: 89 4d cc mov %ecx,-0x34(%ebp)
-400096b4: 89 f2 mov %esi,%edx
-400096b6: 8a 4d d8 mov -0x28(%ebp),%cl
-400096b9: d3 ea shr %cl,%edx
-400096bb: 8b 45 cc mov -0x34(%ebp),%eax
-400096be: 8a 4d dc mov -0x24(%ebp),%cl
-400096c1: d3 e0 shl %cl,%eax
-400096c3: 09 c2 or %eax,%edx
-400096c5: 89 55 d0 mov %edx,-0x30(%ebp)
-400096c8: 8b 45 cc mov -0x34(%ebp),%eax
-400096cb: 8a 4d d8 mov -0x28(%ebp),%cl
-400096ce: d3 e8 shr %cl,%eax
-400096d0: 89 45 d4 mov %eax,-0x2c(%ebp)
-400096d3: e9 0c ff ff ff jmp 400095e4 <__umoddi3+0x60>
-400096d8: 39 c6 cmp %eax,%esi
-400096da: 73 ce jae 400096aa <__umoddi3+0x126>
-400096dc: 29 f8 sub %edi,%eax
-400096de: 1b 55 f4 sbb -0xc(%ebp),%edx
-400096e1: eb c7 jmp 400096aa <__umoddi3+0x126>
diff --git a/src/modules/cdi/include/cdi/cmos.h b/src/modules/cdi/include/cdi/cmos.h
old mode 100755
new mode 100644
--
1.7.1