diff --git a/libguile/loader.c b/libguile/loader.c index 26a73436b..743c8b0cd 100644 --- a/libguile/loader.c +++ b/libguile/loader.c @@ -1,5 +1,5 @@ /* Copyright (C) 2001, 2009, 2010, 2011, 2012 - * 2013, 2014, 2015, 2017 Free Software Foundation, Inc. + * 2013, 2014, 2015, 2017, 2018 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -341,7 +341,7 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr, return NULL; } -#define ABORT(msg) do { err_msg = msg; goto cleanup; } while (0) +#define ABORT(msg) do { err_msg = msg; errno = 0; goto cleanup; } while (0) static SCM load_thunk_from_memory (char *data, size_t len, int is_read_only) @@ -460,7 +460,10 @@ load_thunk_from_memory (char *data, size_t len, int is_read_only) if ((err_msg = process_dynamic_segment (data, &ph[dynamic_segment], &init, &entry, &frame_maps))) - goto cleanup; + { + errno = 0; /* not an OS error */ + goto cleanup; + } if (scm_is_true (init)) scm_call_0 (init);