diff options
| author | seyko <seyko2@gmail.com> | 2015-03-23 19:24:55 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-03-23 19:24:55 +0300 |
| commit | 8f6390061d4e839ad57d69ceb227e4f957b658de (patch) | |
| tree | 461d3f731e0bc0f6f866823ab553edc2db86311a /libtcc.c | |
| parent | 8dbe129ab78c2d43a9c69da795436cd7a4daf820 (diff) | |
| download | tinycc-8f6390061d4e839ad57d69ceb227e4f957b658de.tar.gz tinycc-8f6390061d4e839ad57d69ceb227e4f957b658de.tar.bz2 | |
fix for: x86_64-tcc compiled by i386-tcc is wrong
A test program (must be compiled by the above version of the tcc):
/* Tickle a bug in TinyC on 64-bit systems:
* the LSB of the top word or ARGP gets set
* for no obvious reason.
*
* Source: a legacy language interpreter which
* has a little stack / stack pointer for arguments.
*
* Output is: 0x8049620 0x10804961c
* Should be: 0x8049620 0x804961c
*/
#include <stdio.h>
#define NARGS 20000
int ARG[NARGS];
int *ARGSPACE = ARG;
int *ARGP = ARG - 1;
main() { printf("%p %p\n", ARGSPACE, ARGP); }
Diffstat (limited to 'libtcc.c')
| -rw-r--r-- | libtcc.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -540,7 +540,7 @@ ST_FUNC void put_extern_sym(Sym *sym, Section *section, /* add a new relocation entry to symbol 'sym' in section 's' */ ST_FUNC void greloca(Section *s, Sym *sym, unsigned long offset, int type, - unsigned long addend) + addr_t addend) { int c = 0; if (sym) { |
