llvm-6502/lib
Bill Wendling c3d505c3c2 Recommit r74952 with a bug fix:
DWARF requires frame moves be specified at specific times. If you have a
prologue like this:

__Z3fooi:
Leh_func_begin1:
LBB1_0: ## entry
       pushl   %ebp
Llabel1:
       movl    %esp, %ebp
Llabel2:
       pushl   %esi
Llabel3:
       subl    $20, %esp
       call    "L1$pb"
"L1$pb":
       popl    %esi

The "pushl %ebp" needs a table entry specifying the offset. The "movl %esp,
%ebp" makes %ebp the new stack frame register, so that needs to be specified in
DWARF. And "pushl %esi" saves the callee-saved %esi register, which also needs
to be specified in DWARF.

Before, all of this logic was in one method. This didn't work too well, because
as you can see there are multiple FDE line entries that need to be created.

This fix creates the "MachineMove" objects directly when they're needed; instead
of waiting until the end, and losing information.

There is some ugliness where we generate code like this:


LBB22_0:	## entry
	pushl	%ebp
Llabel280:
	movl	%esp, %ebp
Llabel281:
Llabel284:
	pushl	%ebp  <----------
	pushl	%ebx
	pushl	%edi
	pushl	%esi
Llabel282:
	subl	$328, %esp

Notice the extra "pushl %ebp". If we generate a "machine move" instruction in
the FDE for that pushl, the linker may get very confused about what value %ebp
should have when exitting the function. I.e., it'll give it the value %esp
instead of the %ebp value from the first "pushl". Not to mention that, in this
case, %ebp isn't modified in the function (that's a separate bug). I put a small
hack in to get it to work. It might be the only solution, but should be
revisited once the above case is fixed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75047 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-08 21:02:53 +00:00
..
Analysis Make the code that updates ScalarEvolution's internal state in response 2009-07-08 19:23:34 +00:00
Archive
AsmParser Support MDNode forward reference. 2009-07-08 19:23:54 +00:00
Bitcode Switch GlobalVariable ctors to a sane API, where *either* a context or a module is required. 2009-07-08 19:03:57 +00:00
CodeGen Use interators instead of counters for loops. 2009-07-08 20:57:27 +00:00
CompilerDriver
Debugger
ExecutionEngine
Linker Switch GlobalVariable ctors to a sane API, where *either* a context or a module is required. 2009-07-08 19:03:57 +00:00
MC
Support
System remove two methods that no longer exist. 2009-07-08 01:07:39 +00:00
Target Recommit r74952 with a bug fix: 2009-07-08 21:02:53 +00:00
Transforms Push LLVMContext _back_ through IRBuilder. 2009-07-08 20:50:47 +00:00
VMCore Implement changes from Chris's feedback. 2009-07-08 20:53:28 +00:00
Makefile