X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=cirros-testvm%2Fsrc-cirros%2Fbuildroot-2015.05%2Fpackage%2Flibiscsi%2F0005-ld_iscsi-fix-largefile-related-issues.patch;fp=cirros-testvm%2Fsrc-cirros%2Fbuildroot-2015.05%2Fpackage%2Flibiscsi%2F0005-ld_iscsi-fix-largefile-related-issues.patch;h=05ad8eb3fc37f120ca04a73beb785a969830b136;hb=b0a0f15dfaa205161a7fcb20cf1b8cd4948c2ef3;hp=0000000000000000000000000000000000000000;hpb=c6ac3cd55ee2da956195eee393b0882105dfad4e;p=packages%2Ftrusty%2Fcirros-testvm.git diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/libiscsi/0005-ld_iscsi-fix-largefile-related-issues.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/libiscsi/0005-ld_iscsi-fix-largefile-related-issues.patch new file mode 100644 index 0000000..05ad8eb --- /dev/null +++ b/cirros-testvm/src-cirros/buildroot-2015.05/package/libiscsi/0005-ld_iscsi-fix-largefile-related-issues.patch @@ -0,0 +1,83 @@ +From b77db7fa6cd00e1412fdd186180996f8d622b275 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sun, 7 Sep 2014 12:21:04 +0200 +Subject: [PATCH 5/5] ld_iscsi: fix largefile related issues + +This commit fixes two related issues in the ld_iscsi example with +largefile support. + +The first issue appears when building libiscsi against the glibc C +library, with the flags -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE +-D_FILE_OFFSET_BITS=64: + +{standard input}: Assembler messages: +{standard input}:2774: Error: symbol `__fxstat64' is already defined +{standard input}:2850: Error: symbol `__lxstat64' is already defined +{standard input}:2938: Error: symbol `__xstat64' is already defined + +This is due to the fact that when _FILE_OFFSET_BITS=64 is passed, the +*64() functions are defined by the C library as aliases to the +non-64*() functions, because those ones directly support large files +(i.e 64 bits). + +The second issue appears when building libiscsi against the uClibc C +library, in a configuration that doesn't have largefile support. In +this case, the ld_iscsi that tries to use stat64 or some other *64() +functions cannot build, because such functions are not provided by the +C library. Of course, ld_iscsi does not need to wrap the *64() +functions in such a situation, because they do not exist. + +This commit fixes those problems by enclosing the *64() related code +of ld_iscsi in the following compile time conditional: + +This ensures that the *64() function handling is here only if +largefile support is available and enabled (_LARGEFILE_SOURCE64) and +if non-*64() functions are not already 64 bits capable (in which case +the 64*() functions are just aliases for the non-64*() ones). + +See also +http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html +for more details about the meaning of those macros. + +Signed-off-by: Thomas Petazzoni +--- + examples/ld_iscsi.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/examples/ld_iscsi.c b/examples/ld_iscsi.c +index 0cf2724..02f9d25 100644 +--- a/examples/ld_iscsi.c ++++ b/examples/ld_iscsi.c +@@ -543,6 +543,7 @@ int dup2(int oldfd, int newfd) + return real_dup2(oldfd, newfd); + } + ++#if defined(_LARGEFILE64_SOURCE) && _FILE_OFFSET_BITS != 64 + + int (*real_fxstat64)(int ver, int fd, struct stat64 *buf); + +@@ -591,6 +592,7 @@ int __xstat64(int ver, const char *path, struct stat64 *buf) + return __lxstat64(ver, path, buf); + } + ++#endif + + static void __attribute__((constructor)) _init(void) + { +@@ -669,6 +671,7 @@ static void __attribute__((constructor)) _init(void) + exit(10); + } + ++#if defined(_LARGEFILE64_SOURCE) && _FILE_OFFSET_BITS != 64 + real_fxstat64 = dlsym(RTLD_NEXT, "__fxstat64"); + if (real_fxstat64 == NULL) { + LD_ISCSI_DPRINTF(0,"Failed to dlsym(__fxstat64)"); +@@ -683,4 +686,5 @@ static void __attribute__((constructor)) _init(void) + if (real_xstat64 == NULL) { + LD_ISCSI_DPRINTF(0,"Failed to dlsym(__xstat64)"); + } ++#endif + } +-- +2.0.0 +