digitalmars.D.bugs - [Issue 11310] New: Alignment failure in test42.d
- d-bugmail puremagic.com (37/37) Oct 20 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (23/23) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (6/6) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (7/7) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (7/7) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (15/15) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (8/8) Oct 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (13/13) Oct 22 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (9/9) Oct 23 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (12/12) Oct 23 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (11/11) Oct 24 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (9/9) Oct 24 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
- d-bugmail puremagic.com (9/9) Oct 24 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11310
http://d.puremagic.com/issues/show_bug.cgi?id=11310 Summary: Alignment failure in test42.d Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bugzilla digitalmars.com 22:43:57 PDT --- Here's the code that fails in test/runnable/test42.d: ----------------------------- align(16) struct S41 { int[4] a; } shared int x41; shared S41 s41; void test41() { printf("&x = %p\n", &x41); printf("&s = %p\n", &s41); assert((cast(int)&s41 & 0xF) == 0); } ---------------------------- when compiled on Linux with: -O -fPIC Curiously, it prints: &x = 0x7fef00 &s = 0x7fef10 which shows it is aligned correctly - so why does the assert fail? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 20 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 safety0ff.bugz <safety0ff.bugz gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |safety0ff.bugz gmail.com 00:01:04 PDT --- I noticed importing random stuff (e.g. std.string, std.stdio, std.algorithm) made it run without error, then I looked at the assembly code: Disassembly of section .text._D6_113106test41FZv: 0000000000000000 <_D6_113106test41FZv>: 0: 55 push %rbp 1: 48 8b ec mov %rsp,%rbp 4: f6 05 00 00 00 00 0f testb $0xf,0x0(%rip) b: 74 0a je 17 <_D6_113106test41FZv+0x17> d: bf 11 00 00 00 mov $0x11,%edi 12: e8 00 00 00 00 callq 17 <_D6_113106test41FZv+0x17> 17: 5d pop %rbp 18: c3 retq 19: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) Looks like it is and'ing the instruction pointer with 0xf. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 00:03:26 PDT --- That is the assembly without printf's, btw. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 12:13:18 PDT --- Created an attachment (id=1273) Edb screenshot for second printf -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 12:13:49 PDT --- Created an attachment (id=1274) Edb screenshot for assert test -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 12:20:33 PDT --- As you can see in the first screen shot, the address for s41 is calculated properly, whereas in the second screenshot the is a mistake. rip for the printf calculation: 0x419c84 rip for the assert calculation: 0x419c99 difference: 0x15 offset for the printf calculation: 0x21e35c offset for the assert calculation: 0x21e344 difference: 0x18 Looking at the relocation section of the executable, printf seems to be giving the correct location (0x63cdd0.) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 12:59:27 PDT --- Looking at the non-optimized version of the code, the test instruction operates on dwords, which makes the constant 3 bytes longer (i.e. the difference noted in comment 5,) the constant off of rip is the same as before. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 22:25:39 PDT --- Created an attachment (id=1279) Edb screenshot for unoptimized version Just to make it more clear what the issue is (I was quite sick when I wrote the other comment): The code responsible for calculating the offsets from the IP to the offset table is calculating an offset that is off by 3 bytes. This offset is appropriate for the instruction present in the unoptimized version which operates on dword. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 22 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 05:52:16 PDT --- Created an attachment (id=1280) This hack makes the program run properly for me I don't know if there are cases where this will produce invalid code, I'll pull out the 64 bit architecture manual tonight and figure it out. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 23 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 safety0ff.bugz <safety0ff.bugz gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |pull 11:52:46 PDT --- After checking manuals, I've concluded that this is the correct fix and I've submitted a pull request: https://github.com/D-Programming-Language/dmd/pull/2691 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 23 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/6ec2800443a088b42722b1580a3388111ed9c2ab fix Issue 11310 - Fix RIP relative offset calculation for TEST instruction. https://github.com/D-Programming-Language/dmd/commit/5138bc4a1aa09e935875c7343adeee3def5ca21c fix Issue 11310 - Fix RIP relative offset calculation for TEST instruction -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 24 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 Commit pushed to 2.064 at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/6edfd4cdd96889dd539f4b888fcf7e1bd70e09a1 fix Issue 11310 - Fix RIP relative offset calculation for TEST instruction -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 24 2013
http://d.puremagic.com/issues/show_bug.cgi?id=11310 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 24 2013