[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#861085: marked as done ([gcc-6] gcc-6 can't compile mixed-bitness code)



Your message dated Wed, 28 Jun 2017 13:07:48 +0200
with message-id <194d943b-ca9f-cd55-2de7-a39bc0d4d851@debian.org>
and subject line Re: [gcc-6] gcc-6 can't compile mixed-bitness code
has caused the Debian Bug report #861085,
regarding [gcc-6] gcc-6 can't compile mixed-bitness code
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
861085: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861085
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: gcc-6
Version: 6.3.0-14
Severity: normal

Dear maintainer,

in attached file you can see the code from CRIU project. gcc-6 fails to compile it,
while gcc-4.9 has no such problem.

$ gcc-6   call32.S 
/usr/bin/ld: /tmp/cczRnuRR.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status

(The code is borrowed from Linux kernel and it also can be found at
<linux kernel>/tools/testing/selftests/x86/thunks.S file).

Regards,
Kirill


--- System information. ---
Architecture: 
Kernel:       Linux 4.11.0-rc7+

Debian Release: 9.0
  500 unstable        ftp.ru.debian.org 
  500 testing         ftp.ru.debian.org 
  500 stable-updates  ftp.ru.debian.org 
  500 stable          security.debian.org 
  500 stable          repo.skype.com 
  500 stable          ftp.ru.debian.org 
    1 experimental    ftp.ru.debian.org 

--- Package information. ---
Depends              (Version) | Installed
==============================-+-==============
cpp-6             (= 6.3.0-14) | 6.3.0-14
gcc-6-base        (= 6.3.0-14) | 
libcc1-0         (>= 6.3.0-14) | 
binutils             (>= 2.28) | 
libgcc-6-dev      (= 6.3.0-14) | 
libc6                (>= 2.14) | 
libgcc1             (>= 1:3.0) | 
libgmp10         (>= 2:5.0.1~) | 
libisl15             (>= 0.15) | 
libmpc3                        | 
libmpfr4            (>= 3.1.3) | 
libstdc++6              (>= 5) | 
zlib1g            (>= 1:1.1.4) | 


Recommends       (Version) | Installed
==========================-+-============
libc6-dev      (>= 2.13-5) | 2.24-10


Suggests                   (Version) | Installed
====================================-+-================
gcc-6-multilib                       | 6.3.0-14
gcc-6-doc               (>= 6.3.0-1) | 
gcc-6-locales           (>= 6.3.0-1) | 
libgcc1-dbg          (>= 1:6.3.0-14) | 
libgomp1-dbg           (>= 6.3.0-14) | 
libitm1-dbg            (>= 6.3.0-14) | 
libatomic1-dbg         (>= 6.3.0-14) | 
libasan3-dbg           (>= 6.3.0-14) | 
liblsan0-dbg           (>= 6.3.0-14) | 
libtsan0-dbg           (>= 6.3.0-14) | 
libubsan0-dbg          (>= 6.3.0-14) | 
libcilkrts5-dbg        (>= 6.3.0-14) | 
libmpx2-dbg            (>= 6.3.0-14) | 
libquadmath0-dbg       (>= 6.3.0-14) | 
/*
 * call32.S - assembly helpers for mixed-bitness code
 * From kernel selftests originally: tools/testing/selftests/x86/thunks.S
 * Copyright (c) 2015 Andrew Lutomirski
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * These are little helpers that make it easier to switch bitness on
 * the fly.
 */

#define __ALIGN		.align 4, 0x90
#define __ALIGN_STR	".align 4, 0x90"

#define GLOBAL(name)		\
	.globl name;		\
	name:

#define ENTRY(name)		\
	.globl name;		\
	.type name, @function;	\
	__ALIGN;		\
	name:

#define END(sym)		\
	.size sym, . - sym

#define __USER32_CS	0x23
#define __USER_CS	0x33

	.text

/*
 * @rdi: Stack to use
 * @esi: Pointer to function for calling
 */
ENTRY(call32_from_64)
	/* Callee-saving registers due to ABI */
	pushq %rbx
	pushq %rbp
	pushq %r12
	pushq %r13
	pushq %r14
	pushq %r15
	pushfq

	/* Switch stacks */
	sub $8, %rdi
	mov %rsp,(%rdi)
	mov %rdi,%rsp

	/* Switch into compatibility mode */
	pushq $__USER32_CS
	pushq $1f
	lretq

1:
	.code32
	/* Run function and switch back */
	call *%esi
	jmp $__USER_CS,$1f
	.code64

1:
	/* Restore the stack */
	mov (%rsp),%rsp
	add $8, %rdi

	/* Restore registers */
	popfq
	popq %r15
	popq %r14
	popq %r13
	popq %r12
	popq %rbp
	popq %rbx
	ret
END(call32_from_64)

ENTRY(main)
	nop
END(main)

--- End Message ---
--- Begin Message ---
closing as invalid. I think this has nothing to do with mixed bitness. The
debian gcc defaults to pie by default. Turning off pie should work for you.

--- End Message ---

Reply to: